@knocklabs/react-core 0.6.14 → 0.6.15

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 (218) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/index.js +2 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/modules/core/constants.js +2 -0
  5. package/dist/cjs/modules/core/constants.js.map +1 -0
  6. package/dist/cjs/modules/core/context/KnockProvider.js +2 -0
  7. package/dist/cjs/modules/core/context/KnockProvider.js.map +1 -0
  8. package/dist/cjs/modules/core/hooks/useAuthenticatedKnockClient.js +2 -0
  9. package/dist/cjs/modules/core/hooks/useAuthenticatedKnockClient.js.map +1 -0
  10. package/dist/cjs/modules/core/hooks/useStableOptions.js +2 -0
  11. package/dist/cjs/modules/core/hooks/useStableOptions.js.map +1 -0
  12. package/dist/cjs/modules/core/utils.js +2 -0
  13. package/dist/cjs/modules/core/utils.js.map +1 -0
  14. package/dist/cjs/modules/feed/context/KnockFeedProvider.js +2 -0
  15. package/dist/cjs/modules/feed/context/KnockFeedProvider.js.map +1 -0
  16. package/dist/cjs/modules/feed/hooks/useFeedSettings.js +2 -0
  17. package/dist/cjs/modules/feed/hooks/useFeedSettings.js.map +1 -0
  18. package/dist/cjs/modules/feed/hooks/useNotificationStore.js +2 -0
  19. package/dist/cjs/modules/feed/hooks/useNotificationStore.js.map +1 -0
  20. package/dist/cjs/modules/feed/hooks/useNotifications.js +2 -0
  21. package/dist/cjs/modules/feed/hooks/useNotifications.js.map +1 -0
  22. package/dist/cjs/modules/guide/context/KnockGuideProvider.js +2 -0
  23. package/dist/cjs/modules/guide/context/KnockGuideProvider.js.map +1 -0
  24. package/dist/cjs/modules/guide/hooks/useGuide.js +2 -0
  25. package/dist/cjs/modules/guide/hooks/useGuide.js.map +1 -0
  26. package/dist/cjs/modules/guide/hooks/useGuideContext.js +2 -0
  27. package/dist/cjs/modules/guide/hooks/useGuideContext.js.map +1 -0
  28. package/dist/cjs/modules/i18n/context/KnockI18nProvider.js +2 -0
  29. package/dist/cjs/modules/i18n/context/KnockI18nProvider.js.map +1 -0
  30. package/dist/cjs/modules/i18n/hooks/useTranslations.js +2 -0
  31. package/dist/cjs/modules/i18n/hooks/useTranslations.js.map +1 -0
  32. package/dist/cjs/modules/i18n/languages/de.js +2 -0
  33. package/dist/cjs/modules/i18n/languages/de.js.map +1 -0
  34. package/dist/cjs/modules/i18n/languages/en.js +2 -0
  35. package/dist/cjs/modules/i18n/languages/en.js.map +1 -0
  36. package/dist/cjs/modules/i18n/languages/index.js +2 -0
  37. package/dist/cjs/modules/i18n/languages/index.js.map +1 -0
  38. package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js +2 -0
  39. package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js.map +1 -0
  40. package/dist/cjs/modules/ms-teams/hooks/useConnectedMsTeamsChannels.js +2 -0
  41. package/dist/cjs/modules/ms-teams/hooks/useConnectedMsTeamsChannels.js.map +1 -0
  42. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js +2 -0
  43. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js.map +1 -0
  44. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsChannels.js +2 -0
  45. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsChannels.js.map +1 -0
  46. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js +2 -0
  47. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js.map +1 -0
  48. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsTeams.js +2 -0
  49. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsTeams.js.map +1 -0
  50. package/dist/cjs/modules/slack/context/KnockSlackProvider.js +2 -0
  51. package/dist/cjs/modules/slack/context/KnockSlackProvider.js.map +1 -0
  52. package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js +2 -0
  53. package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +1 -0
  54. package/dist/cjs/modules/slack/hooks/useSlackAuth.js +2 -0
  55. package/dist/cjs/modules/slack/hooks/useSlackAuth.js.map +1 -0
  56. package/dist/cjs/modules/slack/hooks/useSlackChannels.js +2 -0
  57. package/dist/cjs/modules/slack/hooks/useSlackChannels.js.map +1 -0
  58. package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js +2 -0
  59. package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -0
  60. package/dist/esm/index.mjs +66 -0
  61. package/dist/esm/index.mjs.map +1 -0
  62. package/dist/esm/modules/core/constants.mjs +5 -0
  63. package/dist/esm/modules/core/constants.mjs.map +1 -0
  64. package/dist/esm/modules/core/context/KnockProvider.mjs +35 -0
  65. package/dist/esm/modules/core/context/KnockProvider.mjs.map +1 -0
  66. package/dist/esm/modules/core/hooks/useAuthenticatedKnockClient.mjs +29 -0
  67. package/dist/esm/modules/core/hooks/useAuthenticatedKnockClient.mjs.map +1 -0
  68. package/dist/esm/modules/core/hooks/useStableOptions.mjs +13 -0
  69. package/dist/esm/modules/core/hooks/useStableOptions.mjs.map +1 -0
  70. package/dist/esm/modules/core/utils.mjs +49 -0
  71. package/dist/esm/modules/core/utils.mjs.map +1 -0
  72. package/dist/esm/modules/feed/context/KnockFeedProvider.mjs +37 -0
  73. package/dist/esm/modules/feed/context/KnockFeedProvider.mjs.map +1 -0
  74. package/dist/esm/modules/feed/hooks/useFeedSettings.mjs +23 -0
  75. package/dist/esm/modules/feed/hooks/useFeedSettings.mjs.map +1 -0
  76. package/dist/esm/modules/feed/hooks/useNotificationStore.mjs +12 -0
  77. package/dist/esm/modules/feed/hooks/useNotificationStore.mjs.map +1 -0
  78. package/dist/esm/modules/feed/hooks/useNotifications.mjs +34 -0
  79. package/dist/esm/modules/feed/hooks/useNotifications.mjs.map +1 -0
  80. package/dist/esm/modules/guide/context/KnockGuideProvider.mjs +33 -0
  81. package/dist/esm/modules/guide/context/KnockGuideProvider.mjs.map +1 -0
  82. package/dist/esm/modules/guide/hooks/useGuide.mjs +21 -0
  83. package/dist/esm/modules/guide/hooks/useGuide.mjs.map +1 -0
  84. package/dist/esm/modules/guide/hooks/useGuideContext.mjs +12 -0
  85. package/dist/esm/modules/guide/hooks/useGuideContext.mjs.map +1 -0
  86. package/dist/esm/modules/i18n/context/KnockI18nProvider.mjs +11 -0
  87. package/dist/esm/modules/i18n/context/KnockI18nProvider.mjs.map +1 -0
  88. package/dist/esm/modules/i18n/hooks/useTranslations.mjs +17 -0
  89. package/dist/esm/modules/i18n/hooks/useTranslations.mjs.map +1 -0
  90. package/dist/esm/modules/i18n/languages/de.mjs +39 -0
  91. package/dist/esm/modules/i18n/languages/de.mjs.map +1 -0
  92. package/dist/esm/modules/i18n/languages/en.mjs +51 -0
  93. package/dist/esm/modules/i18n/languages/en.mjs.map +1 -0
  94. package/dist/esm/modules/i18n/languages/index.mjs +10 -0
  95. package/dist/esm/modules/i18n/languages/index.mjs.map +1 -0
  96. package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs +48 -0
  97. package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs.map +1 -0
  98. package/dist/esm/modules/ms-teams/hooks/useConnectedMsTeamsChannels.mjs +78 -0
  99. package/dist/esm/modules/ms-teams/hooks/useConnectedMsTeamsChannels.mjs.map +1 -0
  100. package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs +53 -0
  101. package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs.map +1 -0
  102. package/dist/esm/modules/ms-teams/hooks/useMsTeamsChannels.mjs +41 -0
  103. package/dist/esm/modules/ms-teams/hooks/useMsTeamsChannels.mjs.map +1 -0
  104. package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs +38 -0
  105. package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs.map +1 -0
  106. package/dist/esm/modules/ms-teams/hooks/useMsTeamsTeams.mjs +51 -0
  107. package/dist/esm/modules/ms-teams/hooks/useMsTeamsTeams.mjs.map +1 -0
  108. package/dist/esm/modules/slack/context/KnockSlackProvider.mjs +49 -0
  109. package/dist/esm/modules/slack/context/KnockSlackProvider.mjs.map +1 -0
  110. package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +78 -0
  111. package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -0
  112. package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +68 -0
  113. package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -0
  114. package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +52 -0
  115. package/dist/esm/modules/slack/hooks/useSlackChannels.mjs.map +1 -0
  116. package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs +47 -0
  117. package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -0
  118. package/dist/types/index.d.ts +8 -0
  119. package/dist/types/index.d.ts.map +1 -0
  120. package/dist/types/interfaces.d.ts +5 -0
  121. package/dist/types/interfaces.d.ts.map +1 -0
  122. package/dist/types/modules/core/constants.d.ts +8 -0
  123. package/dist/types/modules/core/constants.d.ts.map +1 -0
  124. package/dist/types/modules/core/context/KnockProvider.d.ts +20 -0
  125. package/dist/types/modules/core/context/KnockProvider.d.ts.map +1 -0
  126. package/dist/types/modules/core/context/index.d.ts +2 -0
  127. package/dist/types/modules/core/context/index.d.ts.map +1 -0
  128. package/dist/types/modules/core/hooks/index.d.ts +3 -0
  129. package/dist/types/modules/core/hooks/index.d.ts.map +1 -0
  130. package/dist/types/modules/core/hooks/useAuthenticatedKnockClient.d.ts +5 -0
  131. package/dist/types/modules/core/hooks/useAuthenticatedKnockClient.d.ts.map +1 -0
  132. package/dist/types/modules/core/hooks/useStableOptions.d.ts +2 -0
  133. package/dist/types/modules/core/hooks/useStableOptions.d.ts.map +1 -0
  134. package/dist/types/modules/core/index.d.ts +5 -0
  135. package/dist/types/modules/core/index.d.ts.map +1 -0
  136. package/dist/types/modules/core/utils.d.ts +24 -0
  137. package/dist/types/modules/core/utils.d.ts.map +1 -0
  138. package/dist/types/modules/feed/context/KnockFeedProvider.d.ts +19 -0
  139. package/dist/types/modules/feed/context/KnockFeedProvider.d.ts.map +1 -0
  140. package/dist/types/modules/feed/context/index.d.ts +2 -0
  141. package/dist/types/modules/feed/context/index.d.ts.map +1 -0
  142. package/dist/types/modules/feed/hooks/index.d.ts +4 -0
  143. package/dist/types/modules/feed/hooks/index.d.ts.map +1 -0
  144. package/dist/types/modules/feed/hooks/useFeedSettings.d.ts +12 -0
  145. package/dist/types/modules/feed/hooks/useFeedSettings.d.ts.map +1 -0
  146. package/dist/types/modules/feed/hooks/useNotificationStore.d.ts +34 -0
  147. package/dist/types/modules/feed/hooks/useNotificationStore.d.ts.map +1 -0
  148. package/dist/types/modules/feed/hooks/useNotifications.d.ts +4 -0
  149. package/dist/types/modules/feed/hooks/useNotifications.d.ts.map +1 -0
  150. package/dist/types/modules/feed/index.d.ts +3 -0
  151. package/dist/types/modules/feed/index.d.ts.map +1 -0
  152. package/dist/types/modules/guide/context/KnockGuideProvider.d.ts +19 -0
  153. package/dist/types/modules/guide/context/KnockGuideProvider.d.ts.map +1 -0
  154. package/dist/types/modules/guide/context/index.d.ts +2 -0
  155. package/dist/types/modules/guide/context/index.d.ts.map +1 -0
  156. package/dist/types/modules/guide/hooks/index.d.ts +2 -0
  157. package/dist/types/modules/guide/hooks/index.d.ts.map +1 -0
  158. package/dist/types/modules/guide/hooks/useGuide.d.ts +9 -0
  159. package/dist/types/modules/guide/hooks/useGuide.d.ts.map +1 -0
  160. package/dist/types/modules/guide/hooks/useGuideContext.d.ts +7 -0
  161. package/dist/types/modules/guide/hooks/useGuideContext.d.ts.map +1 -0
  162. package/dist/types/modules/guide/index.d.ts +3 -0
  163. package/dist/types/modules/guide/index.d.ts.map +1 -0
  164. package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts +8 -0
  165. package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts.map +1 -0
  166. package/dist/types/modules/i18n/context/index.d.ts +2 -0
  167. package/dist/types/modules/i18n/context/index.d.ts.map +1 -0
  168. package/dist/types/modules/i18n/hooks/index.d.ts +2 -0
  169. package/dist/types/modules/i18n/hooks/index.d.ts.map +1 -0
  170. package/dist/types/modules/i18n/hooks/useTranslations.d.ts +5 -0
  171. package/dist/types/modules/i18n/hooks/useTranslations.d.ts.map +1 -0
  172. package/dist/types/modules/i18n/index.d.ts +4 -0
  173. package/dist/types/modules/i18n/index.d.ts.map +1 -0
  174. package/dist/types/modules/i18n/languages/de.d.ts +4 -0
  175. package/dist/types/modules/i18n/languages/de.d.ts.map +1 -0
  176. package/dist/types/modules/i18n/languages/en.d.ts +4 -0
  177. package/dist/types/modules/i18n/languages/en.d.ts.map +1 -0
  178. package/dist/types/modules/i18n/languages/index.d.ts +54 -0
  179. package/dist/types/modules/i18n/languages/index.d.ts.map +1 -0
  180. package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts +20 -0
  181. package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts.map +1 -0
  182. package/dist/types/modules/ms-teams/context/index.d.ts +2 -0
  183. package/dist/types/modules/ms-teams/context/index.d.ts.map +1 -0
  184. package/dist/types/modules/ms-teams/hooks/index.d.ts +6 -0
  185. package/dist/types/modules/ms-teams/hooks/index.d.ts.map +1 -0
  186. package/dist/types/modules/ms-teams/hooks/useConnectedMsTeamsChannels.d.ts +15 -0
  187. package/dist/types/modules/ms-teams/hooks/useConnectedMsTeamsChannels.d.ts.map +1 -0
  188. package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts +7 -0
  189. package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts.map +1 -0
  190. package/dist/types/modules/ms-teams/hooks/useMsTeamsChannels.d.ts +14 -0
  191. package/dist/types/modules/ms-teams/hooks/useMsTeamsChannels.d.ts.map +1 -0
  192. package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts +13 -0
  193. package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts.map +1 -0
  194. package/dist/types/modules/ms-teams/hooks/useMsTeamsTeams.d.ts +13 -0
  195. package/dist/types/modules/ms-teams/hooks/useMsTeamsTeams.d.ts.map +1 -0
  196. package/dist/types/modules/ms-teams/index.d.ts +4 -0
  197. package/dist/types/modules/ms-teams/index.d.ts.map +1 -0
  198. package/dist/types/modules/ms-teams/interfaces.d.ts +11 -0
  199. package/dist/types/modules/ms-teams/interfaces.d.ts.map +1 -0
  200. package/dist/types/modules/slack/context/KnockSlackProvider.d.ts +30 -0
  201. package/dist/types/modules/slack/context/KnockSlackProvider.d.ts.map +1 -0
  202. package/dist/types/modules/slack/context/index.d.ts +2 -0
  203. package/dist/types/modules/slack/context/index.d.ts.map +1 -0
  204. package/dist/types/modules/slack/hooks/index.d.ts +5 -0
  205. package/dist/types/modules/slack/hooks/index.d.ts.map +1 -0
  206. package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +15 -0
  207. package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts.map +1 -0
  208. package/dist/types/modules/slack/hooks/useSlackAuth.d.ts +11 -0
  209. package/dist/types/modules/slack/hooks/useSlackAuth.d.ts.map +1 -0
  210. package/dist/types/modules/slack/hooks/useSlackChannels.d.ts +13 -0
  211. package/dist/types/modules/slack/hooks/useSlackChannels.d.ts.map +1 -0
  212. package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +13 -0
  213. package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts.map +1 -0
  214. package/dist/types/modules/slack/index.d.ts +4 -0
  215. package/dist/types/modules/slack/index.d.ts.map +1 -0
  216. package/dist/types/modules/slack/interfaces.d.ts +10 -0
  217. package/dist/types/modules/slack/interfaces.d.ts.map +1 -0
  218. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.mjs","sources":["../../../../../src/modules/i18n/languages/en.ts"],"sourcesContent":["import { I18nContent } from \".\";\n\nconst en: I18nContent = {\n translations: {\n archiveNotification: \"Archive this notification\",\n archiveRead: \"Archive Read\",\n markAllAsRead: \"Mark all as read\",\n notifications: \"Notifications\",\n emptyFeedTitle: \"No notifications yet\",\n emptyFeedBody: \"We'll let you know when we've got something new for you.\",\n all: \"All\",\n unread: \"Unread\",\n read: \"Read\",\n unseen: \"Unseen\",\n msTeamsChannelSetError: \"Error setting channel.\",\n msTeamsConnect: \"Connect to Microsoft Teams\",\n msTeamsConnected: \"Connected\",\n msTeamsConnecting: \"Connecting to Microsoft Teams…\",\n msTeamsConnectionErrorExists:\n \"Try reconnecting to Microsoft Teams to find and select channels from your teams.\",\n msTeamsConnectionErrorOccurred:\n \"There was an error connecting to Microsoft Teams. Try reconnecting to find and select channels from your teams.\",\n msTeamsConnectContainerDescription:\n \"Connect to get notifications in Microsoft Teams\",\n msTeamsDisconnect: \"Disconnect\",\n msTeamsDisconnecting: \"Disconnecting from Microsoft Teams…\",\n msTeamsError: \"Error\",\n msTeamsReconnect: \"Reconnect\",\n msTeamsTenantIdNotSet: \"Microsoft Teams tenant ID not set.\",\n slackConnectChannel: \"Connect channel\",\n slackChannelId: \"Slack channel ID\",\n slackConnecting: \"Connecting to Slack...\",\n slackDisconnecting: \"Disconnecting...\",\n slackConnect: \"Connect to Slack\",\n slackConnected: \"Connected\",\n slackConnectContainerDescription:\n \"Connect to get notifications in your Slack workspace.\",\n slackSearchbarDisconnected: \"Slack is not connected.\",\n slackSearchbarNoChannelsConnected: \"Search channels\",\n slackSearchbarNoChannelsFound: \"No slack channels.\",\n slackSearchbarChannelsError: \"Error fetching channels.\",\n slackSearchChannels: \"Search channels\",\n slackConnectionErrorExists:\n \"Try reconnecting to Slack to find and select channels from your workspace.\",\n slackConnectionErrorOccurred:\n \"There was an error connecting to Slack. Try reconnecting to find and select channels from your workspace.\",\n slackChannelAlreadyConnected: \"Error: already connected\",\n slackError: \"Error\",\n slackDisconnect: \"Disconnect\",\n slackChannelSetError: \"Error setting channel.\",\n slackAccessTokenNotSet: \"Access token not set.\",\n slackReconnect: \"Reconnect\",\n },\n locale: \"en\",\n};\n\nexport default en;\n"],"names":["en","translations","archiveNotification","archiveRead","markAllAsRead","notifications","emptyFeedTitle","emptyFeedBody","all","unread","read","unseen","msTeamsChannelSetError","msTeamsConnect","msTeamsConnected","msTeamsConnecting","msTeamsConnectionErrorExists","msTeamsConnectionErrorOccurred","msTeamsConnectContainerDescription","msTeamsDisconnect","msTeamsDisconnecting","msTeamsError","msTeamsReconnect","msTeamsTenantIdNotSet","slackConnectChannel","slackChannelId","slackConnecting","slackDisconnecting","slackConnect","slackConnected","slackConnectContainerDescription","slackSearchbarDisconnected","slackSearchbarNoChannelsConnected","slackSearchbarNoChannelsFound","slackSearchbarChannelsError","slackSearchChannels","slackConnectionErrorExists","slackConnectionErrorOccurred","slackChannelAlreadyConnected","slackError","slackDisconnect","slackChannelSetError","slackAccessTokenNotSet","slackReconnect","locale"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtBC,cAAc;AAAA,IACZC,qBAAqB;AAAA,IACrBC,aAAa;AAAA,IACbC,eAAe;AAAA,IACfC,eAAe;AAAA,IACfC,gBAAgB;AAAA,IAChBC,eAAe;AAAA,IACfC,KAAK;AAAA,IACLC,QAAQ;AAAA,IACRC,MAAM;AAAA,IACNC,QAAQ;AAAA,IACRC,wBAAwB;AAAA,IACxBC,gBAAgB;AAAA,IAChBC,kBAAkB;AAAA,IAClBC,mBAAmB;AAAA,IACnBC,8BACE;AAAA,IACFC,gCACE;AAAA,IACFC,oCACE;AAAA,IACFC,mBAAmB;AAAA,IACnBC,sBAAsB;AAAA,IACtBC,cAAc;AAAA,IACdC,kBAAkB;AAAA,IAClBC,uBAAuB;AAAA,IACvBC,qBAAqB;AAAA,IACrBC,gBAAgB;AAAA,IAChBC,iBAAiB;AAAA,IACjBC,oBAAoB;AAAA,IACpBC,cAAc;AAAA,IACdC,gBAAgB;AAAA,IAChBC,kCACE;AAAA,IACFC,4BAA4B;AAAA,IAC5BC,mCAAmC;AAAA,IACnCC,+BAA+B;AAAA,IAC/BC,6BAA6B;AAAA,IAC7BC,qBAAqB;AAAA,IACrBC,4BACE;AAAA,IACFC,8BACE;AAAA,IACFC,8BAA8B;AAAA,IAC9BC,YAAY;AAAA,IACZC,iBAAiB;AAAA,IACjBC,sBAAsB;AAAA,IACtBC,wBAAwB;AAAA,IACxBC,gBAAgB;AAAA,EAClB;AAAA,EACAC,QAAQ;AACV;"}
@@ -0,0 +1,10 @@
1
+ import o from "./de.mjs";
2
+ import r from "./en.mjs";
3
+ const t = {
4
+ en: r,
5
+ de: o
6
+ };
7
+ export {
8
+ t as locales
9
+ };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../src/modules/i18n/languages/index.ts"],"sourcesContent":["import de from \"./de\";\nimport en from \"./en\";\n\nexport interface Translations {\n readonly archiveRead: string;\n readonly emptyFeedTitle: string;\n readonly emptyFeedBody: string;\n readonly notifications: string;\n readonly poweredBy: string;\n readonly markAllAsRead: string;\n readonly archiveNotification: string;\n readonly all: string;\n readonly unread: string;\n readonly read: string;\n readonly unseen: string;\n readonly msTeamsChannelSetError: string;\n readonly msTeamsConnect: string;\n readonly msTeamsConnected: string;\n readonly msTeamsConnecting: string;\n readonly msTeamsConnectionErrorExists: string;\n readonly msTeamsConnectionErrorOccurred: string;\n readonly msTeamsConnectContainerDescription: string;\n readonly msTeamsDisconnect: string;\n readonly msTeamsDisconnecting: string;\n readonly msTeamsError: string;\n readonly msTeamsReconnect: string;\n readonly msTeamsTenantIdNotSet: string;\n readonly slackConnectChannel: string;\n readonly slackChannelId: string;\n readonly slackConnecting: string;\n readonly slackDisconnecting: string;\n readonly slackConnect: string;\n readonly slackConnected: string;\n readonly slackConnectContainerDescription: string;\n readonly slackSearchbarDisconnected: string;\n readonly slackSearchbarNoChannelsConnected: string;\n readonly slackSearchbarNoChannelsFound: string;\n readonly slackSearchbarChannelsError: string;\n readonly slackSearchChannels: string;\n readonly slackConnectionErrorOccurred: string;\n readonly slackConnectionErrorExists: string;\n readonly slackChannelAlreadyConnected: string;\n readonly slackError: string;\n readonly slackDisconnect: string;\n readonly slackChannelSetError: string;\n readonly slackAccessTokenNotSet: string;\n readonly slackReconnect: string;\n}\n\nexport interface I18nContent {\n readonly translations: Partial<Translations>;\n readonly locale: string;\n}\n\nexport const locales = { en, de };\n"],"names":["locales","en","de"],"mappings":";;AAsDO,MAAMA,IAAU;AAAA,EAAEC,IAAAA;AAAAA,EAAIC,IAAAA;AAAG;"}
@@ -0,0 +1,48 @@
1
+ import * as o from "react";
2
+ import { useKnockClient as l } from "../../core/context/KnockProvider.mjs";
3
+ import "@knocklabs/client";
4
+ import "fast-deep-equal";
5
+ import { msTeamsProviderKey as v } from "../../core/utils.mjs";
6
+ import C from "../hooks/useMsTeamsConnectionStatus.mjs";
7
+ import "swr/infinite";
8
+ import "swr";
9
+ import "../../i18n/context/KnockI18nProvider.mjs";
10
+ const n = o.createContext(null), M = ({
11
+ knockMsTeamsChannelId: t,
12
+ tenantId: e,
13
+ children: i
14
+ }) => {
15
+ const m = l(), {
16
+ connectionStatus: r,
17
+ setConnectionStatus: c,
18
+ errorLabel: s,
19
+ setErrorLabel: a,
20
+ actionLabel: u,
21
+ setActionLabel: p
22
+ } = C(m, t, e);
23
+ return /* @__PURE__ */ o.createElement(n.Provider, { key: v({
24
+ knockMsTeamsChannelId: t,
25
+ tenantId: e,
26
+ connectionStatus: r,
27
+ errorLabel: s
28
+ }), value: {
29
+ connectionStatus: r,
30
+ setConnectionStatus: c,
31
+ errorLabel: s,
32
+ setErrorLabel: a,
33
+ actionLabel: u,
34
+ setActionLabel: p,
35
+ knockMsTeamsChannelId: t,
36
+ tenantId: e
37
+ } }, i);
38
+ }, S = () => {
39
+ const t = o.useContext(n);
40
+ if (!t)
41
+ throw new Error("useKnockMsTeamsClient must be used within a KnockMsTeamsProvider");
42
+ return t;
43
+ };
44
+ export {
45
+ M as KnockMsTeamsProvider,
46
+ S as useKnockMsTeamsClient
47
+ };
48
+ //# sourceMappingURL=KnockMsTeamsProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnockMsTeamsProvider.mjs","sources":["../../../../../src/modules/ms-teams/context/KnockMsTeamsProvider.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\nimport { msTeamsProviderKey } from \"../../core/utils\";\nimport { useMsTeamsConnectionStatus } from \"../hooks\";\nimport { ConnectionStatus } from \"../hooks/useMsTeamsConnectionStatus\";\n\nexport interface KnockMsTeamsProviderState {\n knockMsTeamsChannelId: string;\n tenantId: string;\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (connectionStatus: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (label: string) => void;\n actionLabel: string | null;\n setActionLabel: (label: string | null) => void;\n}\n\nconst MsTeamsProviderStateContext =\n React.createContext<KnockMsTeamsProviderState | null>(null);\n\nexport interface KnockMsTeamsProviderProps {\n knockMsTeamsChannelId: string;\n tenantId: string;\n}\n\nexport const KnockMsTeamsProvider: React.FC<\n PropsWithChildren<KnockMsTeamsProviderProps>\n> = ({ knockMsTeamsChannelId, tenantId, children }) => {\n const knock = useKnockClient();\n\n const {\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n } = useMsTeamsConnectionStatus(knock, knockMsTeamsChannelId, tenantId);\n\n return (\n <MsTeamsProviderStateContext.Provider\n key={msTeamsProviderKey({\n knockMsTeamsChannelId,\n tenantId,\n connectionStatus,\n errorLabel,\n })}\n value={{\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n knockMsTeamsChannelId,\n tenantId,\n }}\n >\n {children}\n </MsTeamsProviderStateContext.Provider>\n );\n};\n\nexport const useKnockMsTeamsClient = (): KnockMsTeamsProviderState => {\n const context = React.useContext(MsTeamsProviderStateContext);\n if (!context) {\n throw new Error(\n \"useKnockMsTeamsClient must be used within a KnockMsTeamsProvider\",\n );\n }\n return context;\n};\n"],"names":["MsTeamsProviderStateContext","React","createContext","KnockMsTeamsProvider","knockMsTeamsChannelId","tenantId","children","knock","useKnockClient","connectionStatus","setConnectionStatus","errorLabel","setErrorLabel","actionLabel","setActionLabel","useMsTeamsConnectionStatus","msTeamsProviderKey","useKnockMsTeamsClient","context","useContext","Error"],"mappings":";;;;;;;;;AAmBA,MAAMA,IACJC,EAAMC,cAAgD,IAAI,GAO/CC,IAETA,CAAC;AAAA,EAAEC,uBAAAA;AAAAA,EAAuBC,UAAAA;AAAAA,EAAUC,UAAAA;AAAS,MAAM;AACrD,QAAMC,IAAQC,EAAe,GAEvB;AAAA,IACJC,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,EACEC,IAAAA,EAA2BR,GAAOH,GAAuBC,CAAQ;AAErE,SACG,gBAAAJ,EAAA,cAAAD,EAA4B,UAA5B,EACC,KAAKgB,EAAmB;AAAA,IACtBZ,uBAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAI,kBAAAA;AAAAA,IACAE,YAAAA;AAAAA,EACD,CAAA,GACD,OAAO;AAAA,IACLF,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAV,uBAAAA;AAAAA,IACAC,UAAAA;AAAAA,OAGDC,CACH;AAEJ,GAEaW,IAAwBA,MAAiC;AAC9DC,QAAAA,IAAUjB,EAAMkB,WAAWnB,CAA2B;AAC5D,MAAI,CAACkB;AACG,UAAA,IAAIE,MACR,kEACF;AAEKF,SAAAA;AACT;"}
@@ -0,0 +1,78 @@
1
+ import { useKnockMsTeamsClient as g } from "../context/KnockMsTeamsProvider.mjs";
2
+ import { useState as l } from "react";
3
+ import "../../i18n/context/KnockI18nProvider.mjs";
4
+ import { useTranslations as S } from "../../i18n/hooks/useTranslations.mjs";
5
+ import "@knocklabs/client";
6
+ import { useKnockClient as T } from "../../core/context/KnockProvider.mjs";
7
+ import "fast-deep-equal";
8
+ import "date-fns";
9
+ import "swr/infinite";
10
+ import k from "swr";
11
+ const M = "MS_TEAMS_CONNECTED_CHANNELS";
12
+ function Y({
13
+ msTeamsChannelsRecipientObject: {
14
+ objectId: e,
15
+ collection: a
16
+ }
17
+ }) {
18
+ const {
19
+ t: m
20
+ } = S(), o = T(), {
21
+ connectionStatus: u,
22
+ knockMsTeamsChannelId: s
23
+ } = g(), [d, r] = l(null), [p, c] = l(!1), {
24
+ data: C,
25
+ mutate: h,
26
+ isValidating: f,
27
+ isLoading: E
28
+ } = k(
29
+ // Only fetch when Microsoft Teams is connected
30
+ u === "connected" ? [M, s, a, e] : null,
31
+ async () => o.objects.getChannelData({
32
+ collection: a,
33
+ objectId: e,
34
+ channelId: s
35
+ }).then((t) => {
36
+ var n;
37
+ return ((n = t.data) == null ? void 0 : n.connections) ?? [];
38
+ }).catch(() => []),
39
+ {
40
+ onSuccess: () => {
41
+ r(null);
42
+ }
43
+ }
44
+ );
45
+ return {
46
+ data: C ?? null,
47
+ updateConnectedChannels: async (t) => {
48
+ c(!0);
49
+ try {
50
+ await h(() => o.objects.setChannelData({
51
+ objectId: e,
52
+ collection: a,
53
+ channelId: s,
54
+ data: {
55
+ connections: t
56
+ }
57
+ }).then((n) => {
58
+ var i;
59
+ return ((i = n.data) == null ? void 0 : i.connections) ?? [];
60
+ }), {
61
+ populateCache: !0,
62
+ revalidate: !1,
63
+ optimisticData: t
64
+ });
65
+ } catch {
66
+ r(m("msTeamsChannelSetError") || "");
67
+ }
68
+ c(!1);
69
+ },
70
+ updating: p,
71
+ loading: E || f,
72
+ error: d
73
+ };
74
+ }
75
+ export {
76
+ Y as default
77
+ };
78
+ //# sourceMappingURL=useConnectedMsTeamsChannels.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnectedMsTeamsChannels.mjs","sources":["../../../../../src/modules/ms-teams/hooks/useConnectedMsTeamsChannels.ts"],"sourcesContent":["import { useKnockMsTeamsClient } from \"..\";\nimport { MsTeamsChannelConnection } from \"@knocklabs/client\";\nimport { GenericData } from \"@knocklabs/types\";\nimport { useState } from \"react\";\nimport useSWR from \"swr\";\n\nimport { RecipientObject } from \"../../..\";\nimport { useKnockClient } from \"../../core\";\nimport { useTranslations } from \"../../i18n\";\n\nconst QUERY_KEY = \"MS_TEAMS_CONNECTED_CHANNELS\";\n\ntype UseConnectedMsTeamsChannelsProps = {\n msTeamsChannelsRecipientObject: RecipientObject;\n};\n\ntype UseConnectedMsTeamsChannelsOutput = {\n data: MsTeamsChannelConnection[] | null;\n updateConnectedChannels: (\n connectedChannels: MsTeamsChannelConnection[],\n ) => Promise<void>;\n loading: boolean;\n error: string | null;\n updating: boolean;\n};\n\nfunction useConnectedMsTeamsChannels({\n msTeamsChannelsRecipientObject: { objectId, collection },\n}: UseConnectedMsTeamsChannelsProps): UseConnectedMsTeamsChannelsOutput {\n const { t } = useTranslations();\n const knock = useKnockClient();\n const { connectionStatus, knockMsTeamsChannelId } = useKnockMsTeamsClient();\n\n const [error, setError] = useState<string | null>(null);\n const [isUpdating, setIsUpdating] = useState(false);\n\n const {\n data: connectedChannels,\n mutate,\n isValidating,\n isLoading,\n } = useSWR<MsTeamsChannelConnection[]>(\n // Only fetch when Microsoft Teams is connected\n connectionStatus === \"connected\"\n ? [QUERY_KEY, knockMsTeamsChannelId, collection, objectId]\n : null,\n async () => {\n return knock.objects\n .getChannelData({\n collection,\n objectId,\n channelId: knockMsTeamsChannelId,\n })\n .then((res) => res.data?.connections ?? [])\n .catch(() => []);\n },\n {\n onSuccess: () => {\n setError(null);\n },\n },\n );\n\n const updateConnectedChannels = async (\n channelsToSendToKnock: MsTeamsChannelConnection[],\n ) => {\n setIsUpdating(true);\n try {\n await mutate(\n () =>\n knock.objects\n .setChannelData({\n objectId,\n collection,\n channelId: knockMsTeamsChannelId,\n data: { connections: channelsToSendToKnock },\n })\n .then((res) => (res as GenericData).data?.connections ?? []),\n {\n populateCache: true,\n revalidate: false,\n optimisticData: channelsToSendToKnock,\n },\n );\n } catch (_error) {\n setError(t(\"msTeamsChannelSetError\") || \"\");\n }\n setIsUpdating(false);\n };\n\n return {\n data: connectedChannels ?? null,\n updateConnectedChannels,\n updating: isUpdating,\n loading: isLoading || isValidating,\n error,\n };\n}\n\nexport default useConnectedMsTeamsChannels;\n"],"names":["QUERY_KEY","useConnectedMsTeamsChannels","msTeamsChannelsRecipientObject","objectId","collection","t","useTranslations","knock","useKnockClient","connectionStatus","knockMsTeamsChannelId","useKnockMsTeamsClient","error","setError","useState","isUpdating","setIsUpdating","data","connectedChannels","mutate","isValidating","isLoading","useSWR","objects","getChannelData","channelId","then","res","connections","catch","onSuccess","updateConnectedChannels","channelsToSendToKnock","setChannelData","populateCache","revalidate","optimisticData","updating","loading"],"mappings":";;;;;;;;;;AAUA,MAAMA,IAAY;AAgBlB,SAASC,EAA4B;AAAA,EACnCC,gCAAgC;AAAA,IAAEC,UAAAA;AAAAA,IAAUC,YAAAA;AAAAA,EAAAA;AACZ,GAAsC;AAChE,QAAA;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB,GACxBC,IAAQC,EAAe,GACvB;AAAA,IAAEC,kBAAAA;AAAAA,IAAkBC,uBAAAA;AAAAA,MAA0BC,EAAsB,GAEpE,CAACC,GAAOC,CAAQ,IAAIC,EAAwB,IAAI,GAChD,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAE5C;AAAA,IACJG,MAAMC;AAAAA,IACNC,QAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC,WAAAA;AAAAA,EAAAA,IACEC;AAAAA;AAAAA,IAEFb,MAAqB,cACjB,CAACT,GAAWU,GAAuBN,GAAYD,CAAQ,IACvD;AAAA,IACJ,YACSI,EAAMgB,QACVC,eAAe;AAAA,MACdpB,YAAAA;AAAAA,MACAD,UAAAA;AAAAA,MACAsB,WAAWf;AAAAA,IACZ,CAAA,EACAgB,KAAMC,CAAAA,MAAAA;;AAAQA,eAAAA,IAAAA,EAAIV,SAAJU,gBAAAA,EAAUC,gBAAe;KAAE,EACzCC,MAAM,MAAM,EAAE;AAAA,IAEnB;AAAA,MACEC,WAAWA,MAAM;AACfjB,QAAAA,EAAS,IAAI;AAAA,MAAA;AAAA,IACf;AAAA,EAEJ;AA6BO,SAAA;AAAA,IACLI,MAAMC,KAAqB;AAAA,IAC3Ba,yBA7B8B,OAC9BC,MACG;AACHhB,MAAAA,EAAc,EAAI;AACd,UAAA;AACF,cAAMG,EACJ,MACEZ,EAAMgB,QACHU,eAAe;AAAA,UACd9B,UAAAA;AAAAA,UACAC,YAAAA;AAAAA,UACAqB,WAAWf;AAAAA,UACXO,MAAM;AAAA,YAAEW,aAAaI;AAAAA,UAAAA;AAAAA,QAAsB,CAC5C,EACAN,KAAMC,CAAAA,MAAAA;;AAASA,mBAAAA,IAAAA,EAAoBV,SAApBU,gBAAAA,EAA0BC,gBAAe,CAAA;AAAA,SAAE,GAC/D;AAAA,UACEM,eAAe;AAAA,UACfC,YAAY;AAAA,UACZC,gBAAgBJ;AAAAA,QAAAA,CAEpB;AAAA,cACe;AACN3B,QAAAA,EAAAA,EAAE,wBAAwB,KAAK,EAAE;AAAA,MAAA;AAE5CW,MAAAA,EAAc,EAAK;AAAA,IACrB;AAAA,IAKEqB,UAAUtB;AAAAA,IACVuB,SAASjB,KAAaD;AAAAA,IACtBR,OAAAA;AAAAA,EACF;AACF;"}
@@ -0,0 +1,53 @@
1
+ import { useKnockMsTeamsClient as T } from "../context/KnockMsTeamsProvider.mjs";
2
+ import { useMemo as _, useCallback as m } from "react";
3
+ import "../../i18n/context/KnockI18nProvider.mjs";
4
+ import { TENANT_OBJECT_COLLECTION as k } from "@knocklabs/client";
5
+ import { useKnockClient as d } from "../../core/context/KnockProvider.mjs";
6
+ import "fast-deep-equal";
7
+ import "date-fns";
8
+ import "swr/infinite";
9
+ import "swr";
10
+ const p = "https://login.microsoftonline.com/organizations/adminconsent", h = "/providers/ms-teams/authenticate";
11
+ function S(r, c) {
12
+ const e = d(), {
13
+ setConnectionStatus: t,
14
+ knockMsTeamsChannelId: n,
15
+ tenantId: o,
16
+ setActionLabel: i
17
+ } = T(), a = _(() => e.host + h, [e.host]), u = m(() => {
18
+ const s = {
19
+ state: JSON.stringify({
20
+ redirect_url: c,
21
+ ms_teams_tenant_object: {
22
+ object_id: o,
23
+ collection: k
24
+ },
25
+ channel_id: n,
26
+ public_key: e.apiKey,
27
+ user_token: e.userToken
28
+ }),
29
+ client_id: r,
30
+ redirect_uri: a
31
+ };
32
+ return `${p}?${new URLSearchParams(s)}`;
33
+ }, [c, o, n, e.apiKey, e.userToken, r, a]), l = m(async () => {
34
+ i(null), t("disconnecting");
35
+ try {
36
+ const s = await e.msTeams.revokeAccessToken({
37
+ tenant: o,
38
+ knockChannelId: n
39
+ });
40
+ t(s === "ok" ? "disconnected" : "error");
41
+ } catch {
42
+ t("error");
43
+ }
44
+ }, [t, e.msTeams, o, n, i]);
45
+ return {
46
+ buildMsTeamsAuthUrl: u,
47
+ disconnectFromMsTeams: l
48
+ };
49
+ }
50
+ export {
51
+ S as default
52
+ };
53
+ //# sourceMappingURL=useMsTeamsAuth.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMsTeamsAuth.mjs","sources":["../../../../../src/modules/ms-teams/hooks/useMsTeamsAuth.ts"],"sourcesContent":["import { useKnockMsTeamsClient } from \"..\";\nimport { TENANT_OBJECT_COLLECTION } from \"@knocklabs/client\";\nimport { useCallback, useMemo } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\n\nconst MS_TEAMS_ADMINCONSENT_URL =\n \"https://login.microsoftonline.com/organizations/adminconsent\";\n\nconst AUTH_REDIRECT_PATH = \"/providers/ms-teams/authenticate\";\n\ninterface UseMsTeamsAuthOutput {\n buildMsTeamsAuthUrl: () => string;\n disconnectFromMsTeams: () => void;\n}\n\nfunction useMsTeamsAuth(\n msTeamsBotId: string,\n redirectUrl?: string,\n): UseMsTeamsAuthOutput {\n const knock = useKnockClient();\n const {\n setConnectionStatus,\n knockMsTeamsChannelId,\n tenantId,\n setActionLabel,\n } = useKnockMsTeamsClient();\n\n const authRedirectUri = useMemo(\n () => knock.host + AUTH_REDIRECT_PATH,\n [knock.host],\n );\n\n const buildMsTeamsAuthUrl = useCallback(() => {\n const rawParams = {\n state: JSON.stringify({\n redirect_url: redirectUrl,\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockMsTeamsChannelId,\n public_key: knock.apiKey,\n user_token: knock.userToken,\n }),\n client_id: msTeamsBotId,\n redirect_uri: authRedirectUri,\n };\n return `${MS_TEAMS_ADMINCONSENT_URL}?${new URLSearchParams(rawParams)}`;\n }, [\n redirectUrl,\n tenantId,\n knockMsTeamsChannelId,\n knock.apiKey,\n knock.userToken,\n msTeamsBotId,\n authRedirectUri,\n ]);\n\n const disconnectFromMsTeams = useCallback(async () => {\n setActionLabel(null);\n setConnectionStatus(\"disconnecting\");\n try {\n const revokeResult = await knock.msTeams.revokeAccessToken({\n tenant: tenantId,\n knockChannelId: knockMsTeamsChannelId,\n });\n\n setConnectionStatus(revokeResult === \"ok\" ? \"disconnected\" : \"error\");\n } catch (_error) {\n setConnectionStatus(\"error\");\n }\n }, [\n setConnectionStatus,\n knock.msTeams,\n tenantId,\n knockMsTeamsChannelId,\n setActionLabel,\n ]);\n\n return { buildMsTeamsAuthUrl, disconnectFromMsTeams };\n}\n\nexport default useMsTeamsAuth;\n"],"names":["MS_TEAMS_ADMINCONSENT_URL","AUTH_REDIRECT_PATH","useMsTeamsAuth","msTeamsBotId","redirectUrl","knock","useKnockClient","setConnectionStatus","knockMsTeamsChannelId","tenantId","setActionLabel","useKnockMsTeamsClient","authRedirectUri","useMemo","host","buildMsTeamsAuthUrl","useCallback","rawParams","state","JSON","stringify","redirect_url","ms_teams_tenant_object","object_id","collection","TENANT_OBJECT_COLLECTION","channel_id","public_key","apiKey","user_token","userToken","client_id","redirect_uri","URLSearchParams","disconnectFromMsTeams","revokeResult","msTeams","revokeAccessToken","tenant","knockChannelId"],"mappings":";;;;;;;;;AAMA,MAAMA,IACJ,gEAEIC,IAAqB;AAO3B,SAASC,EACPC,GACAC,GACsB;AACtB,QAAMC,IAAQC,EAAe,GACvB;AAAA,IACJC,qBAAAA;AAAAA,IACAC,uBAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,gBAAAA;AAAAA,MACEC,EAAsB,GAEpBC,IAAkBC,EACtB,MAAMR,EAAMS,OAAOb,GACnB,CAACI,EAAMS,IAAI,CACb,GAEMC,IAAsBC,EAAY,MAAM;AAC5C,UAAMC,IAAY;AAAA,MAChBC,OAAOC,KAAKC,UAAU;AAAA,QACpBC,cAAcjB;AAAAA,QACdkB,wBAAwB;AAAA,UACtBC,WAAWd;AAAAA,UACXe,YAAYC;AAAAA,QACd;AAAA,QACAC,YAAYlB;AAAAA,QACZmB,YAAYtB,EAAMuB;AAAAA,QAClBC,YAAYxB,EAAMyB;AAAAA,MAAAA,CACnB;AAAA,MACDC,WAAW5B;AAAAA,MACX6B,cAAcpB;AAAAA,IAChB;AACA,WAAO,GAAGZ,CAAyB,IAAI,IAAIiC,gBAAgBhB,CAAS,CAAC;AAAA,EACvE,GAAG,CACDb,GACAK,GACAD,GACAH,EAAMuB,QACNvB,EAAMyB,WACN3B,GACAS,CAAe,CAChB,GAEKsB,IAAwBlB,EAAY,YAAY;AACpDN,IAAAA,EAAe,IAAI,GACnBH,EAAoB,eAAe;AAC/B,QAAA;AACF,YAAM4B,IAAe,MAAM9B,EAAM+B,QAAQC,kBAAkB;AAAA,QACzDC,QAAQ7B;AAAAA,QACR8B,gBAAgB/B;AAAAA,MAAAA,CACjB;AAEmB2B,MAAAA,EAAAA,MAAiB,OAAO,iBAAiB,OAAO;AAAA,YACrD;AACf5B,MAAAA,EAAoB,OAAO;AAAA,IAAA;AAAA,EAC7B,GACC,CACDA,GACAF,EAAM+B,SACN3B,GACAD,GACAE,CAAc,CACf;AAEM,SAAA;AAAA,IAAEK,qBAAAA;AAAAA,IAAqBmB,uBAAAA;AAAAA,EAAsB;AACtD;"}
@@ -0,0 +1,41 @@
1
+ import f from "swr";
2
+ import { useKnockClient as r } from "../../core/context/KnockProvider.mjs";
3
+ import "@knocklabs/client";
4
+ import "react";
5
+ import "fast-deep-equal";
6
+ import "date-fns";
7
+ import { useKnockMsTeamsClient as h } from "../context/KnockMsTeamsProvider.mjs";
8
+ const k = "MS_TEAMS_CHANNELS";
9
+ function S({
10
+ teamId: e,
11
+ queryOptions: n
12
+ }) {
13
+ const s = r(), {
14
+ knockMsTeamsChannelId: a,
15
+ tenantId: l
16
+ } = h(), c = () => s.msTeams.getChannels({
17
+ knockChannelId: a,
18
+ tenant: l,
19
+ teamId: e,
20
+ queryOptions: {
21
+ $filter: n == null ? void 0 : n.filter,
22
+ $select: n == null ? void 0 : n.select
23
+ }
24
+ }), {
25
+ data: t,
26
+ isLoading: o,
27
+ isValidating: m,
28
+ mutate: i
29
+ } = f(e ? [k, e] : null, c, {
30
+ revalidateOnFocus: !1
31
+ });
32
+ return {
33
+ data: (t == null ? void 0 : t.ms_teams_channels) ?? [],
34
+ isLoading: o || m,
35
+ refetch: () => i()
36
+ };
37
+ }
38
+ export {
39
+ S as default
40
+ };
41
+ //# sourceMappingURL=useMsTeamsChannels.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMsTeamsChannels.mjs","sources":["../../../../../src/modules/ms-teams/hooks/useMsTeamsChannels.ts"],"sourcesContent":["import { GetMsTeamsChannelsResponse, MsTeamsChannel } from \"@knocklabs/client\";\nimport useSWR from \"swr\";\n\nimport { useKnockClient } from \"../../core\";\nimport { useKnockMsTeamsClient } from \"../context\";\nimport { MsTeamsChannelQueryOptions } from \"../interfaces\";\n\nconst QUERY_KEY = \"MS_TEAMS_CHANNELS\";\n\ntype UseMsTeamsChannelsProps = {\n teamId?: string;\n queryOptions?: MsTeamsChannelQueryOptions;\n};\n\ntype UseMsTeamsChannelsOutput = {\n data: MsTeamsChannel[];\n isLoading: boolean;\n refetch: () => void;\n};\n\nfunction useMsTeamsChannels({\n teamId,\n queryOptions,\n}: UseMsTeamsChannelsProps): UseMsTeamsChannelsOutput {\n const knock = useKnockClient();\n const { knockMsTeamsChannelId, tenantId } = useKnockMsTeamsClient();\n\n const fetchChannels = () =>\n knock.msTeams.getChannels({\n knockChannelId: knockMsTeamsChannelId,\n tenant: tenantId,\n teamId: teamId!,\n queryOptions: {\n $filter: queryOptions?.filter,\n $select: queryOptions?.select,\n },\n });\n\n const { data, isLoading, isValidating, mutate } =\n useSWR<GetMsTeamsChannelsResponse>(\n teamId ? [QUERY_KEY, teamId] : null,\n fetchChannels,\n { revalidateOnFocus: false },\n );\n\n return {\n data: data?.ms_teams_channels ?? [],\n isLoading: isLoading || isValidating,\n refetch: () => mutate(),\n };\n}\n\nexport default useMsTeamsChannels;\n"],"names":["QUERY_KEY","useMsTeamsChannels","teamId","queryOptions","knock","useKnockClient","knockMsTeamsChannelId","tenantId","useKnockMsTeamsClient","fetchChannels","msTeams","getChannels","knockChannelId","tenant","$filter","filter","$select","select","data","isLoading","isValidating","mutate","useSWR","revalidateOnFocus","ms_teams_channels","refetch"],"mappings":";;;;;;;AAOA,MAAMA,IAAY;AAalB,SAASC,EAAmB;AAAA,EAC1BC,QAAAA;AAAAA,EACAC,cAAAA;AACuB,GAA6B;AACpD,QAAMC,IAAQC,EAAe,GACvB;AAAA,IAAEC,uBAAAA;AAAAA,IAAuBC,UAAAA;AAAAA,MAAaC,EAAsB,GAE5DC,IAAgBA,MACpBL,EAAMM,QAAQC,YAAY;AAAA,IACxBC,gBAAgBN;AAAAA,IAChBO,QAAQN;AAAAA,IACRL,QAAAA;AAAAA,IACAC,cAAc;AAAA,MACZW,SAASX,KAAAA,gBAAAA,EAAcY;AAAAA,MACvBC,SAASb,KAAAA,gBAAAA,EAAcc;AAAAA,IAAAA;AAAAA,EACzB,CACD,GAEG;AAAA,IAAEC,MAAAA;AAAAA,IAAMC,WAAAA;AAAAA,IAAWC,cAAAA;AAAAA,IAAcC,QAAAA;AAAAA,EAAAA,IACrCC,EACEpB,IAAS,CAACF,GAAWE,CAAM,IAAI,MAC/BO,GACA;AAAA,IAAEc,mBAAmB;AAAA,EAAA,CACvB;AAEK,SAAA;AAAA,IACLL,OAAMA,KAAAA,gBAAAA,EAAMM,sBAAqB,CAAE;AAAA,IACnCL,WAAWA,KAAaC;AAAAA,IACxBK,SAASA,MAAMJ,EAAO;AAAA,EACxB;AACF;"}
@@ -0,0 +1,38 @@
1
+ import { useState as o, useEffect as T } from "react";
2
+ import "../../i18n/context/KnockI18nProvider.mjs";
3
+ import { useTranslations as p } from "../../i18n/hooks/useTranslations.mjs";
4
+ function R(c, s, r) {
5
+ const {
6
+ t: a
7
+ } = p(), [n, t] = o("connecting"), [l, d] = o(null), [h, S] = o(null);
8
+ return T(() => {
9
+ (async () => {
10
+ var u, i, m, f;
11
+ if (n === "connecting")
12
+ try {
13
+ const e = await c.msTeams.authCheck({
14
+ tenant: r,
15
+ knockChannelId: s
16
+ });
17
+ if (((u = e.connection) == null ? void 0 : u.ok) === !0)
18
+ return t("connected");
19
+ if (((i = e.connection) == null ? void 0 : i.ok) === !1 || e.code === "ERR_BAD_REQUEST" && ((f = (m = e.response) == null ? void 0 : m.data) == null ? void 0 : f.message) === a("msTeamsTenantIdNotSet"))
20
+ return t("disconnected");
21
+ t("error");
22
+ } catch {
23
+ t("error");
24
+ }
25
+ })();
26
+ }, [n, r, s, c.msTeams, a]), {
27
+ connectionStatus: n,
28
+ setConnectionStatus: t,
29
+ errorLabel: l,
30
+ setErrorLabel: d,
31
+ actionLabel: h,
32
+ setActionLabel: S
33
+ };
34
+ }
35
+ export {
36
+ R as default
37
+ };
38
+ //# sourceMappingURL=useMsTeamsConnectionStatus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMsTeamsConnectionStatus.mjs","sources":["../../../../../src/modules/ms-teams/hooks/useMsTeamsConnectionStatus.ts"],"sourcesContent":["import Knock from \"@knocklabs/client\";\nimport { useEffect, useState } from \"react\";\n\nimport { useTranslations } from \"../../i18n\";\n\nexport type ConnectionStatus =\n | \"connecting\"\n | \"connected\"\n | \"disconnected\"\n | \"error\"\n | \"disconnecting\";\n\ntype UseMsTeamsConnectionStatusOutput = {\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (status: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (errorLabel: string) => void;\n actionLabel: string | null;\n setActionLabel: (actionLabel: string | null) => void;\n};\n\nfunction useMsTeamsConnectionStatus(\n knock: Knock,\n knockMsTeamsChannelId: string,\n tenantId: string,\n): UseMsTeamsConnectionStatusOutput {\n const { t } = useTranslations();\n\n const [connectionStatus, setConnectionStatus] =\n useState<ConnectionStatus>(\"connecting\");\n const [errorLabel, setErrorLabel] = useState<string | null>(null);\n const [actionLabel, setActionLabel] = useState<string | null>(null);\n\n useEffect(() => {\n const checkAuthStatus = async () => {\n if (connectionStatus !== \"connecting\") return;\n\n try {\n const authRes = await knock.msTeams.authCheck({\n tenant: tenantId,\n knockChannelId: knockMsTeamsChannelId,\n });\n\n if (authRes.connection?.ok === true) {\n return setConnectionStatus(\"connected\");\n }\n\n if (authRes.connection?.ok === false) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is a normal response for a tenant that doesn't have\n // ms_teams_tenant_id set on it, meaning it's not connected to MS Teams,\n // so we give it a \"disconnected\" status instead of an error status.\n if (\n authRes.code === \"ERR_BAD_REQUEST\" &&\n authRes.response?.data?.message === t(\"msTeamsTenantIdNotSet\")\n ) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is for any Knock errors that would require a reconnect.\n setConnectionStatus(\"error\");\n } catch (_error) {\n setConnectionStatus(\"error\");\n }\n };\n\n checkAuthStatus();\n }, [connectionStatus, tenantId, knockMsTeamsChannelId, knock.msTeams, t]);\n\n return {\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n };\n}\n\nexport default useMsTeamsConnectionStatus;\n"],"names":["useMsTeamsConnectionStatus","knock","knockMsTeamsChannelId","tenantId","t","useTranslations","connectionStatus","setConnectionStatus","useState","errorLabel","setErrorLabel","actionLabel","setActionLabel","useEffect","authRes","msTeams","authCheck","tenant","knockChannelId","connection","ok","code","response","data","message"],"mappings":";;;AAqBA,SAASA,EACPC,GACAC,GACAC,GACkC;AAC5B,QAAA;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB,GAExB,CAACC,GAAkBC,CAAmB,IAC1CC,EAA2B,YAAY,GACnC,CAACC,GAAYC,CAAa,IAAIF,EAAwB,IAAI,GAC1D,CAACG,GAAaC,CAAc,IAAIJ,EAAwB,IAAI;AAElEK,SAAAA,EAAU,MAAM;AAmCE,KAlCQ,YAAY;;AAClC,UAAIP,MAAqB;AAErB,YAAA;AACF,gBAAMQ,IAAU,MAAMb,EAAMc,QAAQC,UAAU;AAAA,YAC5CC,QAAQd;AAAAA,YACRe,gBAAgBhB;AAAAA,UAAAA,CACjB;AAEGY,gBAAAA,IAAAA,EAAQK,eAARL,gBAAAA,EAAoBM,QAAO;AAC7B,mBAAOb,EAAoB,WAAW;AAWtCO,gBAREA,IAAAA,EAAQK,eAARL,gBAAAA,EAAoBM,QAAO,MAQ7BN,EAAQO,SAAS,uBACjBP,KAAAA,IAAAA,EAAQQ,aAARR,gBAAAA,EAAkBS,SAAlBT,gBAAAA,EAAwBU,aAAYpB,EAAE,uBAAuB;AAE7D,mBAAOG,EAAoB,cAAc;AAI3CA,UAAAA,EAAoB,OAAO;AAAA,gBACZ;AACfA,UAAAA,EAAoB,OAAO;AAAA,QAAA;AAAA,IAE/B,GAEgB;AAAA,EAAA,GACf,CAACD,GAAkBH,GAAUD,GAAuBD,EAAMc,SAASX,CAAC,CAAC,GAEjE;AAAA,IACLE,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAE,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,EACF;AACF;"}
@@ -0,0 +1,51 @@
1
+ import { useMemo as C, useEffect as S } from "react";
2
+ import g from "swr/infinite";
3
+ import { useKnockClient as E } from "../../core/context/KnockProvider.mjs";
4
+ import "@knocklabs/client";
5
+ import "fast-deep-equal";
6
+ import "date-fns";
7
+ import { useKnockMsTeamsClient as x } from "../context/KnockMsTeamsProvider.mjs";
8
+ const I = 1e3, T = "MS_TEAMS_TEAMS";
9
+ function $(t, n) {
10
+ return t === 0 ? [T, ""] : n && ["", null].includes(n.skip_token) ? null : [T, n.skip_token ?? ""];
11
+ }
12
+ function R({
13
+ queryOptions: t = {}
14
+ }) {
15
+ const n = E(), {
16
+ knockMsTeamsChannelId: M,
17
+ tenantId: _,
18
+ connectionStatus: l
19
+ } = x(), r = (e) => n.msTeams.getTeams({
20
+ knockChannelId: M,
21
+ tenant: _,
22
+ queryOptions: {
23
+ $skiptoken: e == null ? void 0 : e[1],
24
+ $top: t == null ? void 0 : t.limitPerPage,
25
+ $filter: t == null ? void 0 : t.filter,
26
+ $select: t == null ? void 0 : t.select
27
+ }
28
+ }), {
29
+ data: a,
30
+ error: o,
31
+ isLoading: s,
32
+ isValidating: c,
33
+ setSize: i,
34
+ mutate: h
35
+ } = g($, r, {
36
+ initialSize: 0,
37
+ revalidateOnFocus: !1,
38
+ revalidateFirstPage: !1
39
+ }), f = a == null ? void 0 : a.at(-1), k = f === void 0 || !!f.skip_token, m = C(() => (a ?? []).flatMap((e) => e == null ? void 0 : e.ms_teams_teams).filter((e) => !!e), [a]), d = (t == null ? void 0 : t.maxCount) || I;
40
+ return S(() => {
41
+ l === "connected" && !o && k && !s && !c && m.length < d && i((e) => e + 1);
42
+ }, [m.length, i, k, s, c, d, o, l]), {
43
+ data: m,
44
+ isLoading: s || c,
45
+ refetch: () => h()
46
+ };
47
+ }
48
+ export {
49
+ R as default
50
+ };
51
+ //# sourceMappingURL=useMsTeamsTeams.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMsTeamsTeams.mjs","sources":["../../../../../src/modules/ms-teams/hooks/useMsTeamsTeams.ts"],"sourcesContent":["import { GetMsTeamsTeamsResponse, MsTeamsTeam } from \"@knocklabs/client\";\nimport { useEffect, useMemo } from \"react\";\nimport useSWRInfinite from \"swr/infinite\";\n\nimport { useKnockClient } from \"../../core\";\nimport { useKnockMsTeamsClient } from \"../context\";\nimport { MsTeamsTeamQueryOptions } from \"../interfaces\";\n\nconst MAX_COUNT = 1000;\n\nconst QUERY_KEY = \"MS_TEAMS_TEAMS\";\n\ntype UseMsTeamsTeamsOptions = {\n queryOptions?: MsTeamsTeamQueryOptions;\n};\n\ntype UseMsTeamsTeamsOutput = {\n data: MsTeamsTeam[];\n isLoading: boolean;\n refetch: () => void;\n};\n\ntype QueryKey = [key: string, skiptoken: string] | null;\n\nfunction getQueryKey(\n pageIndex: number,\n previousPageData: GetMsTeamsTeamsResponse,\n): QueryKey {\n // First page so just pass empty\n if (pageIndex === 0) {\n return [QUERY_KEY, \"\"];\n }\n\n // If there's no more data then return an empty next skiptoken\n if (previousPageData && [\"\", null].includes(previousPageData.skip_token)) {\n return null;\n }\n\n // Next skiptoken exists so pass it\n return [QUERY_KEY, previousPageData.skip_token ?? \"\"];\n}\n\nfunction useMsTeamsTeams({\n queryOptions = {},\n}: UseMsTeamsTeamsOptions): UseMsTeamsTeamsOutput {\n const knock = useKnockClient();\n const { knockMsTeamsChannelId, tenantId, connectionStatus } =\n useKnockMsTeamsClient();\n\n const fetchTeams = (queryKey: QueryKey) =>\n knock.msTeams.getTeams({\n knockChannelId: knockMsTeamsChannelId,\n tenant: tenantId,\n queryOptions: {\n $skiptoken: queryKey?.[1],\n $top: queryOptions?.limitPerPage,\n $filter: queryOptions?.filter,\n $select: queryOptions?.select,\n },\n });\n\n const { data, error, isLoading, isValidating, setSize, mutate } =\n useSWRInfinite<GetMsTeamsTeamsResponse>(getQueryKey, fetchTeams, {\n initialSize: 0,\n revalidateOnFocus: false,\n revalidateFirstPage: false,\n });\n\n const lastPage = data?.at(-1);\n const hasNextPage = lastPage === undefined || !!lastPage.skip_token;\n\n const teams = useMemo(\n () =>\n (data ?? [])\n .flatMap((page) => page?.ms_teams_teams)\n .filter((team) => !!team),\n [data],\n );\n\n const maxCount = queryOptions?.maxCount || MAX_COUNT;\n\n useEffect(() => {\n if (\n connectionStatus === \"connected\" &&\n !error &&\n hasNextPage &&\n !isLoading &&\n !isValidating &&\n teams.length < maxCount\n ) {\n // Fetch a page at a time until we have nothing else left to fetch\n // or we've already hit the max amount of teams to fetch\n setSize((size) => size + 1);\n }\n }, [\n teams.length,\n setSize,\n hasNextPage,\n isLoading,\n isValidating,\n maxCount,\n error,\n connectionStatus,\n ]);\n\n return {\n data: teams,\n isLoading: isLoading || isValidating,\n refetch: () => mutate(),\n };\n}\n\nexport default useMsTeamsTeams;\n"],"names":["MAX_COUNT","QUERY_KEY","getQueryKey","pageIndex","previousPageData","includes","skip_token","useMsTeamsTeams","queryOptions","knock","useKnockClient","knockMsTeamsChannelId","tenantId","connectionStatus","useKnockMsTeamsClient","fetchTeams","queryKey","msTeams","getTeams","knockChannelId","tenant","$skiptoken","$top","limitPerPage","$filter","filter","$select","select","data","error","isLoading","isValidating","setSize","mutate","useSWRInfinite","initialSize","revalidateOnFocus","revalidateFirstPage","lastPage","at","hasNextPage","undefined","teams","useMemo","flatMap","page","ms_teams_teams","team","maxCount","useEffect","length","size","refetch"],"mappings":";;;;;;;AAQA,MAAMA,IAAY,KAEZC,IAAY;AAclB,SAASC,EACPC,GACAC,GACU;AAEV,SAAID,MAAc,IACT,CAACF,GAAW,EAAE,IAInBG,KAAoB,CAAC,IAAI,IAAI,EAAEC,SAASD,EAAiBE,UAAU,IAC9D,OAIF,CAACL,GAAWG,EAAiBE,cAAc,EAAE;AACtD;AAEA,SAASC,EAAgB;AAAA,EACvBC,cAAAA,IAAe,CAAA;AACO,GAA0B;AAChD,QAAMC,IAAQC,EAAe,GACvB;AAAA,IAAEC,uBAAAA;AAAAA,IAAuBC,UAAAA;AAAAA,IAAUC,kBAAAA;AAAAA,MACvCC,EAAsB,GAElBC,IAAaA,CAACC,MAClBP,EAAMQ,QAAQC,SAAS;AAAA,IACrBC,gBAAgBR;AAAAA,IAChBS,QAAQR;AAAAA,IACRJ,cAAc;AAAA,MACZa,YAAYL,KAAAA,gBAAAA,EAAW;AAAA,MACvBM,MAAMd,KAAAA,gBAAAA,EAAce;AAAAA,MACpBC,SAAShB,KAAAA,gBAAAA,EAAciB;AAAAA,MACvBC,SAASlB,KAAAA,gBAAAA,EAAcmB;AAAAA,IAAAA;AAAAA,EACzB,CACD,GAEG;AAAA,IAAEC,MAAAA;AAAAA,IAAMC,OAAAA;AAAAA,IAAOC,WAAAA;AAAAA,IAAWC,cAAAA;AAAAA,IAAcC,SAAAA;AAAAA,IAASC,QAAAA;AAAAA,EAAAA,IACrDC,EAAwChC,GAAaa,GAAY;AAAA,IAC/DoB,aAAa;AAAA,IACbC,mBAAmB;AAAA,IACnBC,qBAAqB;AAAA,EAAA,CACtB,GAEGC,IAAWV,KAAAA,gBAAAA,EAAMW,GAAG,KACpBC,IAAcF,MAAaG,UAAa,CAAC,CAACH,EAAShC,YAEnDoC,IAAQC,EACZ,OACGf,KAAQ,IACNgB,QAASC,CAASA,MAAAA,KAAAA,gBAAAA,EAAMC,cAAc,EACtCrB,OAAQsB,OAAS,CAAC,CAACA,CAAI,GAC5B,CAACnB,CAAI,CACP,GAEMoB,KAAWxC,KAAAA,gBAAAA,EAAcwC,aAAYhD;AAE3CiD,SAAAA,EAAU,MAAM;AAEZpC,IAAAA,MAAqB,eACrB,CAACgB,KACDW,KACA,CAACV,KACD,CAACC,KACDW,EAAMQ,SAASF,KAING,EAAAA,CAAAA,MAASA,IAAO,CAAC;AAAA,EAE9B,GAAG,CACDT,EAAMQ,QACNlB,GACAQ,GACAV,GACAC,GACAiB,GACAnB,GACAhB,CAAgB,CACjB,GAEM;AAAA,IACLe,MAAMc;AAAAA,IACNZ,WAAWA,KAAaC;AAAAA,IACxBqB,SAASA,MAAMnB,EAAO;AAAA,EACxB;AACF;"}
@@ -0,0 +1,49 @@
1
+ import d from "../hooks/useSlackConnectionStatus.mjs";
2
+ import * as o from "react";
3
+ import "swr/infinite";
4
+ import { useKnockClient as S } from "../../core/context/KnockProvider.mjs";
5
+ import "@knocklabs/client";
6
+ import "fast-deep-equal";
7
+ import { slackProviderKey as C } from "../../core/utils.mjs";
8
+ import "swr";
9
+ import "../../i18n/context/KnockI18nProvider.mjs";
10
+ const a = o.createContext(null), I = (t) => {
11
+ const {
12
+ knockSlackChannelId: e,
13
+ children: i
14
+ } = t, n = "tenantId" in t ? t.tenantId : t.tenant, l = S(), {
15
+ connectionStatus: r,
16
+ setConnectionStatus: s,
17
+ errorLabel: c,
18
+ setErrorLabel: k,
19
+ actionLabel: m,
20
+ setActionLabel: u
21
+ } = d(l, e, n);
22
+ return /* @__PURE__ */ o.createElement(a.Provider, { key: C({
23
+ knockSlackChannelId: e,
24
+ tenantId: n,
25
+ connectionStatus: r,
26
+ errorLabel: c
27
+ }), value: {
28
+ connectionStatus: r,
29
+ setConnectionStatus: s,
30
+ errorLabel: c,
31
+ setErrorLabel: k,
32
+ actionLabel: m,
33
+ setActionLabel: u,
34
+ knockSlackChannelId: e,
35
+ // Assign the same value to both tenant and tenantId for backwards compatibility
36
+ tenant: n,
37
+ tenantId: n
38
+ } }, i);
39
+ }, L = () => {
40
+ const t = o.useContext(a);
41
+ if (t === void 0)
42
+ throw new Error("useKnockSlackClient must be used within a KnockSlackProvider");
43
+ return t;
44
+ };
45
+ export {
46
+ I as KnockSlackProvider,
47
+ L as useKnockSlackClient
48
+ };
49
+ //# sourceMappingURL=KnockSlackProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnockSlackProvider.mjs","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"sourcesContent":["import { useSlackConnectionStatus } from \"..\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { slackProviderKey } from \"../../core\";\nimport { useKnockClient } from \"../../core\";\nimport { ConnectionStatus } from \"../hooks/useSlackConnectionStatus\";\n\nexport interface KnockSlackProviderState {\n knockSlackChannelId: string;\n tenantId: string;\n /**\n * @deprecated Use `tenantId` instead. This field will be removed in a future release.\n */\n tenant: string;\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (connectionStatus: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (label: string) => void;\n actionLabel: string | null;\n setActionLabel: (label: string | null) => void;\n}\n\nconst SlackProviderStateContext =\n React.createContext<KnockSlackProviderState | null>(null);\n\nexport type KnockSlackProviderProps =\n | {\n knockSlackChannelId: string;\n /**\n * @deprecated Use `tenantId` instead. This field will be removed in a future release.\n */\n tenant: string;\n }\n | {\n knockSlackChannelId: string;\n tenantId: string;\n };\n\nexport const KnockSlackProvider: React.FC<\n PropsWithChildren<KnockSlackProviderProps>\n> = (props) => {\n const { knockSlackChannelId, children } = props;\n const tenantId = \"tenantId\" in props ? props.tenantId : props.tenant;\n\n const knock = useKnockClient();\n\n const {\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n } = useSlackConnectionStatus(knock, knockSlackChannelId, tenantId);\n\n return (\n <SlackProviderStateContext.Provider\n key={slackProviderKey({\n knockSlackChannelId,\n tenantId,\n connectionStatus,\n errorLabel,\n })}\n value={{\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n knockSlackChannelId,\n // Assign the same value to both tenant and tenantId for backwards compatibility\n tenant: tenantId,\n tenantId,\n }}\n >\n {children}\n </SlackProviderStateContext.Provider>\n );\n};\n\nexport const useKnockSlackClient = (): KnockSlackProviderState => {\n const context = React.useContext(\n SlackProviderStateContext,\n ) as KnockSlackProviderState;\n if (context === undefined) {\n throw new Error(\n \"useKnockSlackClient must be used within a KnockSlackProvider\",\n );\n }\n return context as KnockSlackProviderState;\n};\n"],"names":["SlackProviderStateContext","React","createContext","KnockSlackProvider","props","knockSlackChannelId","children","tenantId","tenant","knock","useKnockClient","connectionStatus","setConnectionStatus","errorLabel","setErrorLabel","actionLabel","setActionLabel","useSlackConnectionStatus","slackProviderKey","useKnockSlackClient","context","useContext","undefined","Error"],"mappings":";;;;;;;;;AAuBA,MAAMA,IACJC,EAAMC,cAA8C,IAAI,GAe7CC,IAERC,CAAUA,MAAA;AACP,QAAA;AAAA,IAAEC,qBAAAA;AAAAA,IAAqBC,UAAAA;AAAAA,EAAAA,IAAaF,GACpCG,IAAW,cAAcH,IAAQA,EAAMG,WAAWH,EAAMI,QAExDC,IAAQC,EAAe,GAEvB;AAAA,IACJC,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,EACEC,IAAAA,EAAyBR,GAAOJ,GAAqBE,CAAQ;AAEjE,SACG,gBAAAN,EAAA,cAAAD,EAA0B,UAA1B,EACC,KAAKkB,EAAiB;AAAA,IACpBb,qBAAAA;AAAAA,IACAE,UAAAA;AAAAA,IACAI,kBAAAA;AAAAA,IACAE,YAAAA;AAAAA,EACD,CAAA,GACD,OAAO;AAAA,IACLF,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAX,qBAAAA;AAAAA;AAAAA,IAEAG,QAAQD;AAAAA,IACRA,UAAAA;AAAAA,OAGDD,CACH;AAEJ,GAEaa,IAAsBA,MAA+B;AAC1DC,QAAAA,IAAUnB,EAAMoB,WACpBrB,CACF;AACA,MAAIoB,MAAYE;AACR,UAAA,IAAIC,MACR,8DACF;AAEKH,SAAAA;AACT;"}
@@ -0,0 +1,78 @@
1
+ import { useKnockSlackClient as S } from "../context/KnockSlackProvider.mjs";
2
+ import { useState as l } from "react";
3
+ import "../../i18n/context/KnockI18nProvider.mjs";
4
+ import { useTranslations as g } from "../../i18n/hooks/useTranslations.mjs";
5
+ import "swr/infinite";
6
+ import { useKnockClient as E } from "../../core/context/KnockProvider.mjs";
7
+ import "@knocklabs/client";
8
+ import "fast-deep-equal";
9
+ import "date-fns";
10
+ import D from "swr";
11
+ const N = "SLACK_CONNECTED_CHANNELS";
12
+ function j({
13
+ slackChannelsRecipientObject: {
14
+ objectId: a,
15
+ collection: e
16
+ }
17
+ }) {
18
+ const {
19
+ t: u
20
+ } = g(), s = E(), {
21
+ connectionStatus: d,
22
+ knockSlackChannelId: o
23
+ } = S(), [p, c] = l(null), [C, r] = l(!1), {
24
+ data: m,
25
+ mutate: h,
26
+ isValidating: f,
27
+ isLoading: k
28
+ } = D(
29
+ // Only fetch when Slack is connected
30
+ d === "connected" ? [N, o, e, a] : null,
31
+ async () => s.objects.getChannelData({
32
+ collection: e,
33
+ objectId: a,
34
+ channelId: o
35
+ }).then((t) => {
36
+ var n;
37
+ return ((n = t.data) == null ? void 0 : n.connections) ?? [];
38
+ }).catch(() => []),
39
+ {
40
+ onSuccess: () => {
41
+ c(null);
42
+ }
43
+ }
44
+ );
45
+ return {
46
+ data: m ?? null,
47
+ updateConnectedChannels: async (t) => {
48
+ r(!0);
49
+ try {
50
+ await h(() => s.objects.setChannelData({
51
+ objectId: a,
52
+ collection: e,
53
+ channelId: o,
54
+ data: {
55
+ connections: t
56
+ }
57
+ }).then((n) => {
58
+ var i;
59
+ return ((i = n.data) == null ? void 0 : i.connections) ?? [];
60
+ }), {
61
+ populateCache: !0,
62
+ revalidate: !1,
63
+ optimisticData: t
64
+ });
65
+ } catch {
66
+ c(u("slackChannelSetError") || "");
67
+ }
68
+ r(!1);
69
+ },
70
+ updating: C,
71
+ loading: k || f,
72
+ error: p
73
+ };
74
+ }
75
+ export {
76
+ j as default
77
+ };
78
+ //# sourceMappingURL=useConnectedSlackChannels.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnectedSlackChannels.mjs","sources":["../../../../../src/modules/slack/hooks/useConnectedSlackChannels.ts"],"sourcesContent":["import { useKnockSlackClient } from \"..\";\nimport { SlackChannelConnection } from \"@knocklabs/client\";\nimport { GenericData } from \"@knocklabs/types\";\nimport { useState } from \"react\";\nimport useSWR from \"swr\";\n\nimport { RecipientObject } from \"../../..\";\nimport { useKnockClient } from \"../../core\";\nimport { useTranslations } from \"../../i18n\";\n\nconst QUERY_KEY = \"SLACK_CONNECTED_CHANNELS\";\n\ntype UseConnectedSlackChannelsProps = {\n slackChannelsRecipientObject: RecipientObject;\n};\n\ntype UseConnectedSlackChannelsOutput = {\n data: SlackChannelConnection[] | null;\n updateConnectedChannels: (\n connectedChannels: SlackChannelConnection[],\n ) => Promise<void>;\n loading: boolean;\n error: string | null;\n updating: boolean;\n};\n\nfunction useConnectedSlackChannels({\n slackChannelsRecipientObject: { objectId, collection },\n}: UseConnectedSlackChannelsProps): UseConnectedSlackChannelsOutput {\n const { t } = useTranslations();\n const knock = useKnockClient();\n const { connectionStatus, knockSlackChannelId } = useKnockSlackClient();\n\n const [error, setError] = useState<string | null>(null);\n const [isUpdating, setIsUpdating] = useState(false);\n\n const {\n data: connectedChannels,\n mutate,\n isValidating,\n isLoading,\n } = useSWR<SlackChannelConnection[]>(\n // Only fetch when Slack is connected\n connectionStatus === \"connected\"\n ? [QUERY_KEY, knockSlackChannelId, collection, objectId]\n : null,\n async () => {\n return knock.objects\n .getChannelData({\n collection,\n objectId,\n channelId: knockSlackChannelId,\n })\n .then((res) => res.data?.connections ?? [])\n .catch(() => []);\n },\n {\n onSuccess: () => {\n setError(null);\n },\n },\n );\n\n const updateConnectedChannels = async (\n channelsToSendToKnock: SlackChannelConnection[],\n ) => {\n setIsUpdating(true);\n try {\n await mutate(\n () =>\n knock.objects\n .setChannelData({\n objectId,\n collection,\n channelId: knockSlackChannelId,\n data: { connections: channelsToSendToKnock },\n })\n .then((res) => (res as GenericData).data?.connections ?? []),\n {\n populateCache: true,\n revalidate: false,\n optimisticData: channelsToSendToKnock,\n },\n );\n } catch (_error) {\n setError(t(\"slackChannelSetError\") || \"\");\n }\n setIsUpdating(false);\n };\n\n return {\n data: connectedChannels ?? null,\n updateConnectedChannels,\n updating: isUpdating,\n loading: isLoading || isValidating,\n error,\n };\n}\n\nexport default useConnectedSlackChannels;\n"],"names":["QUERY_KEY","useConnectedSlackChannels","slackChannelsRecipientObject","objectId","collection","t","useTranslations","knock","useKnockClient","connectionStatus","knockSlackChannelId","useKnockSlackClient","error","setError","useState","isUpdating","setIsUpdating","data","connectedChannels","mutate","isValidating","isLoading","useSWR","objects","getChannelData","channelId","then","res","connections","catch","onSuccess","updateConnectedChannels","channelsToSendToKnock","setChannelData","populateCache","revalidate","optimisticData","updating","loading"],"mappings":";;;;;;;;;;AAUA,MAAMA,IAAY;AAgBlB,SAASC,EAA0B;AAAA,EACjCC,8BAA8B;AAAA,IAAEC,UAAAA;AAAAA,IAAUC,YAAAA;AAAAA,EAAAA;AACZ,GAAoC;AAC5D,QAAA;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB,GACxBC,IAAQC,EAAe,GACvB;AAAA,IAAEC,kBAAAA;AAAAA,IAAkBC,qBAAAA;AAAAA,MAAwBC,EAAoB,GAEhE,CAACC,GAAOC,CAAQ,IAAIC,EAAwB,IAAI,GAChD,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAE5C;AAAA,IACJG,MAAMC;AAAAA,IACNC,QAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC,WAAAA;AAAAA,EAAAA,IACEC;AAAAA;AAAAA,IAEFb,MAAqB,cACjB,CAACT,GAAWU,GAAqBN,GAAYD,CAAQ,IACrD;AAAA,IACJ,YACSI,EAAMgB,QACVC,eAAe;AAAA,MACdpB,YAAAA;AAAAA,MACAD,UAAAA;AAAAA,MACAsB,WAAWf;AAAAA,IACZ,CAAA,EACAgB,KAAMC,CAAAA,MAAAA;;AAAQA,eAAAA,IAAAA,EAAIV,SAAJU,gBAAAA,EAAUC,gBAAe;KAAE,EACzCC,MAAM,MAAM,EAAE;AAAA,IAEnB;AAAA,MACEC,WAAWA,MAAM;AACfjB,QAAAA,EAAS,IAAI;AAAA,MAAA;AAAA,IACf;AAAA,EAEJ;AA6BO,SAAA;AAAA,IACLI,MAAMC,KAAqB;AAAA,IAC3Ba,yBA7B8B,OAC9BC,MACG;AACHhB,MAAAA,EAAc,EAAI;AACd,UAAA;AACF,cAAMG,EACJ,MACEZ,EAAMgB,QACHU,eAAe;AAAA,UACd9B,UAAAA;AAAAA,UACAC,YAAAA;AAAAA,UACAqB,WAAWf;AAAAA,UACXO,MAAM;AAAA,YAAEW,aAAaI;AAAAA,UAAAA;AAAAA,QAAsB,CAC5C,EACAN,KAAMC,CAAAA,MAAAA;;AAASA,mBAAAA,IAAAA,EAAoBV,SAApBU,gBAAAA,EAA0BC,gBAAe,CAAA;AAAA,SAAE,GAC/D;AAAA,UACEM,eAAe;AAAA,UACfC,YAAY;AAAA,UACZC,gBAAgBJ;AAAAA,QAAAA,CAEpB;AAAA,cACe;AACN3B,QAAAA,EAAAA,EAAE,sBAAsB,KAAK,EAAE;AAAA,MAAA;AAE1CW,MAAAA,EAAc,EAAK;AAAA,IACrB;AAAA,IAKEqB,UAAUtB;AAAAA,IACVuB,SAASjB,KAAaD;AAAAA,IACtBR,OAAAA;AAAAA,EACF;AACF;"}
@@ -0,0 +1,68 @@
1
+ import { useKnockSlackClient as S } from "../context/KnockSlackProvider.mjs";
2
+ import { useCallback as u } from "react";
3
+ import "../../i18n/context/KnockI18nProvider.mjs";
4
+ import "swr/infinite";
5
+ import { useKnockClient as _ } from "../../core/context/KnockProvider.mjs";
6
+ import { TENANT_OBJECT_COLLECTION as h } from "@knocklabs/client";
7
+ import "fast-deep-equal";
8
+ import "date-fns";
9
+ import "swr";
10
+ const A = "https://slack.com/oauth/v2/authorize", a = ["chat:write", "chat:write.public", "channels:read", "groups:read"];
11
+ function f(e) {
12
+ return e ? Array.isArray(e) ? {
13
+ scopes: a,
14
+ additionalScopes: e
15
+ } : {
16
+ scopes: e.scopes ?? a,
17
+ additionalScopes: e.additionalScopes ?? []
18
+ } : {
19
+ scopes: a,
20
+ additionalScopes: []
21
+ };
22
+ }
23
+ function I(e, s, k) {
24
+ const o = _(), {
25
+ setConnectionStatus: c,
26
+ knockSlackChannelId: t,
27
+ tenantId: n,
28
+ setActionLabel: i
29
+ } = S(), {
30
+ scopes: d,
31
+ additionalScopes: p
32
+ } = f(k), l = Array.from(new Set(d.concat(p))), m = u(async () => {
33
+ i(null), c("disconnecting");
34
+ try {
35
+ const r = await o.slack.revokeAccessToken({
36
+ tenant: n,
37
+ knockChannelId: t
38
+ });
39
+ c(r === "ok" ? "disconnected" : "error");
40
+ } catch {
41
+ c("error");
42
+ }
43
+ }, [c, o.slack, n, t, i]);
44
+ return {
45
+ buildSlackAuthUrl: u(() => {
46
+ const r = {
47
+ state: JSON.stringify({
48
+ redirect_url: s,
49
+ access_token_object: {
50
+ object_id: n,
51
+ collection: h
52
+ },
53
+ channel_id: t,
54
+ public_key: o.apiKey,
55
+ user_token: o.userToken
56
+ }),
57
+ client_id: e,
58
+ scope: l.join(",")
59
+ };
60
+ return `${A}?${new URLSearchParams(r)}`;
61
+ }, [s, n, t, o.apiKey, o.userToken, e, l]),
62
+ disconnectFromSlack: m
63
+ };
64
+ }
65
+ export {
66
+ I as default
67
+ };
68
+ //# sourceMappingURL=useSlackAuth.mjs.map