@novu/react 3.15.0 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/cjs/components/NovuUI.cjs.map +1 -1
  2. package/dist/cjs/components/NovuUI.d.cts +2 -2
  3. package/dist/cjs/components/connect-chat/ConnectChat.cjs +63 -0
  4. package/dist/cjs/components/connect-chat/ConnectChat.cjs.map +1 -0
  5. package/dist/cjs/components/connect-chat/ConnectChat.d.cts +12 -0
  6. package/dist/cjs/components/connect-chat/DefaultConnectChat.cjs +83 -0
  7. package/dist/cjs/components/connect-chat/DefaultConnectChat.cjs.map +1 -0
  8. package/dist/cjs/components/connect-chat/DefaultConnectChat.d.cts +7 -0
  9. package/dist/cjs/components/index.cjs +4 -0
  10. package/dist/cjs/components/index.cjs.map +1 -1
  11. package/dist/cjs/components/index.d.cts +5 -1
  12. package/dist/cjs/components/slack-connect-button/DefaultSlackConnectButton.cjs +89 -0
  13. package/dist/cjs/components/slack-connect-button/DefaultSlackConnectButton.cjs.map +1 -0
  14. package/dist/cjs/components/slack-connect-button/DefaultSlackConnectButton.d.cts +7 -0
  15. package/dist/cjs/components/slack-connect-button/SlackConnectButton.cjs +63 -0
  16. package/dist/cjs/components/slack-connect-button/SlackConnectButton.cjs.map +1 -0
  17. package/dist/cjs/components/slack-connect-button/SlackConnectButton.d.cts +12 -0
  18. package/dist/cjs/components/slack-link-user/DefaultSlackLinkUser.cjs +80 -0
  19. package/dist/cjs/components/slack-link-user/DefaultSlackLinkUser.cjs.map +1 -0
  20. package/dist/cjs/components/slack-link-user/DefaultSlackLinkUser.d.cts +7 -0
  21. package/dist/cjs/components/slack-link-user/SlackLinkUser.cjs +63 -0
  22. package/dist/cjs/components/slack-link-user/SlackLinkUser.cjs.map +1 -0
  23. package/dist/cjs/components/slack-link-user/SlackLinkUser.d.cts +12 -0
  24. package/dist/cjs/hooks/NovuProvider.cjs +34 -22
  25. package/dist/cjs/hooks/NovuProvider.cjs.map +1 -1
  26. package/dist/cjs/hooks/NovuProvider.d.cts +13 -2
  27. package/dist/cjs/hooks/index.cjs +10 -0
  28. package/dist/cjs/hooks/index.cjs.map +1 -1
  29. package/dist/cjs/hooks/index.d.cts +5 -0
  30. package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs +5 -2
  31. package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs.map +1 -1
  32. package/dist/cjs/hooks/internal/useBrowserTabsChannel.d.cts +2 -1
  33. package/dist/cjs/hooks/internal/useWebsocketEvent.cjs +6 -3
  34. package/dist/cjs/hooks/internal/useWebsocketEvent.cjs.map +1 -1
  35. package/dist/cjs/hooks/internal/useWebsocketEvent.d.cts +2 -1
  36. package/dist/cjs/hooks/useChannelConnection.cjs +107 -0
  37. package/dist/cjs/hooks/useChannelConnection.cjs.map +1 -0
  38. package/dist/cjs/hooks/useChannelConnection.d.cts +20 -0
  39. package/dist/cjs/hooks/useChannelConnections.cjs +85 -0
  40. package/dist/cjs/hooks/useChannelConnections.cjs.map +1 -0
  41. package/dist/cjs/hooks/useChannelConnections.d.cts +24 -0
  42. package/dist/cjs/hooks/useChannelEndpoint.cjs +110 -0
  43. package/dist/cjs/hooks/useChannelEndpoint.cjs.map +1 -0
  44. package/dist/cjs/hooks/useChannelEndpoint.d.cts +20 -0
  45. package/dist/cjs/hooks/useCounts.cjs +5 -1
  46. package/dist/cjs/hooks/useCounts.cjs.map +1 -1
  47. package/dist/cjs/hooks/useCounts.d.cts +18 -0
  48. package/dist/cjs/hooks/useCreateChannelEndpoint.cjs +61 -0
  49. package/dist/cjs/hooks/useCreateChannelEndpoint.cjs.map +1 -0
  50. package/dist/cjs/hooks/useCreateChannelEndpoint.d.cts +17 -0
  51. package/dist/cjs/hooks/useDeleteChannelEndpoint.cjs +69 -0
  52. package/dist/cjs/hooks/useDeleteChannelEndpoint.cjs.map +1 -0
  53. package/dist/cjs/hooks/useDeleteChannelEndpoint.d.cts +17 -0
  54. package/dist/cjs/hooks/useNotifications.cjs +4 -0
  55. package/dist/cjs/hooks/useNotifications.cjs.map +1 -1
  56. package/dist/cjs/hooks/useNotifications.d.cts +18 -0
  57. package/dist/cjs/index.cjs +14 -0
  58. package/dist/cjs/index.cjs.map +1 -1
  59. package/dist/cjs/index.d.cts +11 -2
  60. package/dist/cjs/internal/index.d.cts +1 -0
  61. package/dist/cjs/themes/index.d.cts +0 -1
  62. package/dist/cjs/utils/appearance.cjs.map +1 -1
  63. package/dist/cjs/utils/appearance.d.cts +2 -2
  64. package/dist/cjs/utils/types.d.cts +1 -1
  65. package/dist/esm/components/NovuUI.d.ts +2 -2
  66. package/dist/esm/components/NovuUI.js.map +1 -1
  67. package/dist/esm/components/connect-chat/ConnectChat.d.ts +12 -0
  68. package/dist/esm/components/connect-chat/ConnectChat.js +28 -0
  69. package/dist/esm/components/connect-chat/ConnectChat.js.map +1 -0
  70. package/dist/esm/components/connect-chat/DefaultConnectChat.d.ts +7 -0
  71. package/dist/esm/components/connect-chat/DefaultConnectChat.js +58 -0
  72. package/dist/esm/components/connect-chat/DefaultConnectChat.js.map +1 -0
  73. package/dist/esm/components/index.d.ts +5 -1
  74. package/dist/esm/components/index.js +2 -0
  75. package/dist/esm/components/index.js.map +1 -1
  76. package/dist/esm/components/slack-connect-button/DefaultSlackConnectButton.d.ts +7 -0
  77. package/dist/esm/components/slack-connect-button/DefaultSlackConnectButton.js +64 -0
  78. package/dist/esm/components/slack-connect-button/DefaultSlackConnectButton.js.map +1 -0
  79. package/dist/esm/components/slack-connect-button/SlackConnectButton.d.ts +12 -0
  80. package/dist/esm/components/slack-connect-button/SlackConnectButton.js +28 -0
  81. package/dist/esm/components/slack-connect-button/SlackConnectButton.js.map +1 -0
  82. package/dist/esm/components/slack-link-user/DefaultSlackLinkUser.d.ts +7 -0
  83. package/dist/esm/components/slack-link-user/DefaultSlackLinkUser.js +55 -0
  84. package/dist/esm/components/slack-link-user/DefaultSlackLinkUser.js.map +1 -0
  85. package/dist/esm/components/slack-link-user/SlackLinkUser.d.ts +12 -0
  86. package/dist/esm/components/slack-link-user/SlackLinkUser.js +28 -0
  87. package/dist/esm/components/slack-link-user/SlackLinkUser.js.map +1 -0
  88. package/dist/esm/hooks/NovuProvider.d.ts +13 -2
  89. package/dist/esm/hooks/NovuProvider.js +33 -22
  90. package/dist/esm/hooks/NovuProvider.js.map +1 -1
  91. package/dist/esm/hooks/index.d.ts +5 -0
  92. package/dist/esm/hooks/index.js +5 -0
  93. package/dist/esm/hooks/index.js.map +1 -1
  94. package/dist/esm/hooks/internal/useBrowserTabsChannel.d.ts +2 -1
  95. package/dist/esm/hooks/internal/useBrowserTabsChannel.js +5 -2
  96. package/dist/esm/hooks/internal/useBrowserTabsChannel.js.map +1 -1
  97. package/dist/esm/hooks/internal/useWebsocketEvent.d.ts +2 -1
  98. package/dist/esm/hooks/internal/useWebsocketEvent.js +6 -3
  99. package/dist/esm/hooks/internal/useWebsocketEvent.js.map +1 -1
  100. package/dist/esm/hooks/useChannelConnection.d.ts +20 -0
  101. package/dist/esm/hooks/useChannelConnection.js +81 -0
  102. package/dist/esm/hooks/useChannelConnection.js.map +1 -0
  103. package/dist/esm/hooks/useChannelConnections.d.ts +24 -0
  104. package/dist/esm/hooks/useChannelConnections.js +60 -0
  105. package/dist/esm/hooks/useChannelConnections.js.map +1 -0
  106. package/dist/esm/hooks/useChannelEndpoint.d.ts +20 -0
  107. package/dist/esm/hooks/useChannelEndpoint.js +83 -0
  108. package/dist/esm/hooks/useChannelEndpoint.js.map +1 -0
  109. package/dist/esm/hooks/useCounts.d.ts +18 -0
  110. package/dist/esm/hooks/useCounts.js +6 -2
  111. package/dist/esm/hooks/useCounts.js.map +1 -1
  112. package/dist/esm/hooks/useCreateChannelEndpoint.d.ts +17 -0
  113. package/dist/esm/hooks/useCreateChannelEndpoint.js +36 -0
  114. package/dist/esm/hooks/useCreateChannelEndpoint.js.map +1 -0
  115. package/dist/esm/hooks/useDeleteChannelEndpoint.d.ts +17 -0
  116. package/dist/esm/hooks/useDeleteChannelEndpoint.js +43 -0
  117. package/dist/esm/hooks/useDeleteChannelEndpoint.js.map +1 -0
  118. package/dist/esm/hooks/useNotifications.d.ts +18 -0
  119. package/dist/esm/hooks/useNotifications.js +5 -1
  120. package/dist/esm/hooks/useNotifications.js.map +1 -1
  121. package/dist/esm/index.d.ts +11 -2
  122. package/dist/esm/index.js +14 -0
  123. package/dist/esm/index.js.map +1 -1
  124. package/dist/esm/utils/appearance.d.ts +2 -2
  125. package/dist/esm/utils/appearance.js.map +1 -1
  126. package/dist/esm/utils/types.d.ts +1 -1
  127. package/package.json +2 -2
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { NovuUIOptions } from '../NovuUI.cjs';
4
+ import { DefaultSlackLinkUserProps } from './DefaultSlackLinkUser.cjs';
5
+ import '@novu/js';
6
+ import '@novu/js/ui';
7
+ import '../../utils/types.cjs';
8
+
9
+ type SlackLinkUserProps = DefaultSlackLinkUserProps & Pick<NovuUIOptions, 'container' | 'appearance'>;
10
+ declare const SlackLinkUser: React__default.MemoExoticComponent<(props: SlackLinkUserProps) => react_jsx_runtime.JSX.Element>;
11
+
12
+ export { SlackLinkUser, type SlackLinkUserProps };
@@ -23,6 +23,7 @@ __export(NovuProvider_exports, {
23
23
  InternalNovuProvider: () => InternalNovuProvider,
24
24
  NovuProvider: () => NovuProvider,
25
25
  useNovu: () => useNovu,
26
+ useRealtime: () => useRealtime,
26
27
  useUnsafeNovu: () => useUnsafeNovu
27
28
  });
28
29
  module.exports = __toCommonJS(NovuProvider_exports);
@@ -30,9 +31,9 @@ var import_js = require("@novu/js");
30
31
  var import_internal = require("@novu/js/internal");
31
32
  var import_react = require("react");
32
33
  var import_jsx_runtime = require("react/jsx-runtime");
33
- var NovuContext = (0, import_react.createContext)(void 0);
34
+ var NovuContext = (0, import_react.createContext)({ novu: void 0, realtime: true });
34
35
  var NovuProvider = (props) => {
35
- const { subscriberId, ...propsWithoutSubscriberId } = props;
36
+ const { subscriberId, realtime = true, ...propsWithoutSubscriberId } = props;
36
37
  const subscriberObj = (0, import_react.useMemo)(
37
38
  () => (0, import_internal.buildSubscriber)({ subscriberId, subscriber: props.subscriber }),
38
39
  [subscriberId, props.subscriber]
@@ -41,7 +42,8 @@ var NovuProvider = (props) => {
41
42
  const providerProps = {
42
43
  ...propsWithoutSubscriberId,
43
44
  applicationIdentifier,
44
- subscriber: subscriberObj
45
+ subscriber: subscriberObj,
46
+ realtime
45
47
  };
46
48
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InternalNovuProvider, { ...providerProps, applicationIdentifier, children: props.children });
47
49
  };
@@ -61,21 +63,25 @@ var InternalNovuProvider = (props) => {
61
63
  socketOptions,
62
64
  useCache,
63
65
  defaultSchedule,
64
- context
66
+ context,
67
+ realtime = true
65
68
  } = props;
66
- const novu = (0, import_react.useMemo)(
67
- () => new import_js.Novu({
68
- applicationIdentifier,
69
- subscriberHash,
70
- contextHash,
71
- backendUrl,
72
- apiUrl,
73
- socketUrl,
74
- socketOptions,
75
- useCache,
76
- subscriber: subscriberObj,
77
- defaultSchedule,
78
- context
69
+ const value = (0, import_react.useMemo)(
70
+ () => ({
71
+ novu: new import_js.Novu({
72
+ applicationIdentifier,
73
+ subscriberHash,
74
+ contextHash,
75
+ backendUrl,
76
+ apiUrl,
77
+ socketUrl,
78
+ socketOptions,
79
+ useCache,
80
+ subscriber: subscriberObj,
81
+ defaultSchedule,
82
+ context
83
+ }),
84
+ realtime
79
85
  }),
80
86
  [
81
87
  applicationIdentifier,
@@ -87,27 +93,33 @@ var InternalNovuProvider = (props) => {
87
93
  apiUrl,
88
94
  socketUrl,
89
95
  socketOptions,
90
- useCache
96
+ useCache,
97
+ realtime
91
98
  ]
92
99
  );
93
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NovuContext.Provider, { value: novu, children });
100
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NovuContext.Provider, { value, children });
94
101
  };
95
102
  var useNovu = () => {
96
103
  const context = (0, import_react.useContext)(NovuContext);
97
- if (!context) {
104
+ if (!context.novu) {
98
105
  throw new Error("useNovu must be used within a <NovuProvider />");
99
106
  }
100
- return context;
107
+ return context.novu;
101
108
  };
102
109
  var useUnsafeNovu = () => {
103
110
  const context = (0, import_react.useContext)(NovuContext);
104
- return context;
111
+ return context.novu;
112
+ };
113
+ var useRealtime = () => {
114
+ const context = (0, import_react.useContext)(NovuContext);
115
+ return context.realtime;
105
116
  };
106
117
  // Annotate the CommonJS export names for ESM import in node:
107
118
  0 && (module.exports = {
108
119
  InternalNovuProvider,
109
120
  NovuProvider,
110
121
  useNovu,
122
+ useRealtime,
111
123
  useUnsafeNovu
112
124
  });
113
125
  //# sourceMappingURL=NovuProvider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/NovuProvider.tsx"],"sourcesContent":["import { Novu, NovuOptions } from '@novu/js';\nimport { buildSubscriber } from '@novu/js/internal';\nimport { createContext, ReactNode, useContext, useMemo } from 'react';\n\nexport type NovuProviderProps = NovuOptions & {\n children: ReactNode;\n};\n\nconst NovuContext = createContext<Novu | undefined>(undefined);\n\nexport const NovuProvider = (props: NovuProviderProps) => {\n const { subscriberId, ...propsWithoutSubscriberId } = props;\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId, subscriber: props.subscriber }),\n [subscriberId, props.subscriber]\n );\n const applicationIdentifier = propsWithoutSubscriberId.applicationIdentifier\n ? propsWithoutSubscriberId.applicationIdentifier\n : '';\n\n const providerProps: NovuProviderProps = {\n ...propsWithoutSubscriberId,\n applicationIdentifier,\n subscriber: subscriberObj,\n };\n\n return (\n <InternalNovuProvider {...providerProps} applicationIdentifier={applicationIdentifier}>\n {props.children}\n </InternalNovuProvider>\n );\n};\n\n/**\n * @internal Should be used internally not to be exposed outside of the library\n */\nexport const InternalNovuProvider = (props: NovuProviderProps) => {\n const applicationIdentifier = props.applicationIdentifier || '';\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId: props.subscriberId, subscriber: props.subscriber }),\n [props.subscriberId, props.subscriber]\n );\n\n const {\n children,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n defaultSchedule,\n context,\n } = props;\n\n const novu = useMemo(\n () =>\n new Novu({\n applicationIdentifier,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n subscriber: subscriberObj,\n defaultSchedule,\n context,\n }),\n [\n applicationIdentifier,\n subscriberHash,\n subscriberObj,\n context,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n ]\n );\n\n return <NovuContext.Provider value={novu}>{children}</NovuContext.Provider>;\n};\n\nexport const useNovu = () => {\n const context = useContext(NovuContext);\n if (!context) {\n throw new Error('useNovu must be used within a <NovuProvider />');\n }\n\n return context;\n};\n\nexport const useUnsafeNovu = () => {\n const context = useContext(NovuContext);\n\n return context;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkC;AAClC,sBAAgC;AAChC,mBAA8D;AAyB1D;AAnBJ,IAAM,kBAAc,4BAAgC,MAAS;AAEtD,IAAM,eAAe,CAAC,UAA6B;AACxD,QAAM,EAAE,cAAc,GAAG,yBAAyB,IAAI;AACtD,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACpE,CAAC,cAAc,MAAM,UAAU;AAAA,EACjC;AACA,QAAM,wBAAwB,yBAAyB,wBACnD,yBAAyB,wBACzB;AAEJ,QAAM,gBAAmC;AAAA,IACvC,GAAG;AAAA,IACH;AAAA,IACA,YAAY;AAAA,EACd;AAEA,SACE,4CAAC,wBAAsB,GAAG,eAAe,uBACtC,gBAAM,UACT;AAEJ;AAKO,IAAM,uBAAuB,CAAC,UAA6B;AAChE,QAAM,wBAAwB,MAAM,yBAAyB;AAC7D,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,MAAM,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACxF,CAAC,MAAM,cAAc,MAAM,UAAU;AAAA,EACvC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAO;AAAA,IACX,MACE,IAAI,eAAK;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,MAAO,UAAS;AACtD;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,SAAO;AACT;AAEO,IAAM,gBAAgB,MAAM;AACjC,QAAM,cAAU,yBAAW,WAAW;AAEtC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/NovuProvider.tsx"],"sourcesContent":["import { Novu, NovuOptions } from '@novu/js';\nimport { buildSubscriber } from '@novu/js/internal';\nimport { createContext, ReactNode, useContext, useMemo } from 'react';\n\nexport type NovuProviderProps = NovuOptions & {\n /**\n * When `false`, disables the WebSocket subscription that auto-injects\n * newly received notifications into the list and subscription that auto-resync\n * notification counts. Built-in mutations like\n * `readAll`, `seenAll`, `archiveAll`, and `archiveAllRead` continue to\n * update local state. Use this when you want to drive new-notification updates yourself (e.g.\n * via your own `novu.on('notifications.notification_received', ...)`\n * handler combined with `refetch()`). Defaults to `true`.\n */\n realtime?: boolean;\n children: ReactNode;\n};\n\nconst NovuContext = createContext<{ novu: Novu; realtime: boolean }>({ novu: undefined as any, realtime: true });\n\nexport const NovuProvider = (props: NovuProviderProps) => {\n const { subscriberId, realtime = true, ...propsWithoutSubscriberId } = props;\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId, subscriber: props.subscriber }),\n [subscriberId, props.subscriber]\n );\n const applicationIdentifier = propsWithoutSubscriberId.applicationIdentifier\n ? propsWithoutSubscriberId.applicationIdentifier\n : '';\n\n const providerProps: NovuProviderProps = {\n ...propsWithoutSubscriberId,\n applicationIdentifier,\n subscriber: subscriberObj,\n realtime,\n };\n\n return (\n <InternalNovuProvider {...providerProps} applicationIdentifier={applicationIdentifier}>\n {props.children}\n </InternalNovuProvider>\n );\n};\n\n/**\n * @internal Should be used internally not to be exposed outside of the library\n */\nexport const InternalNovuProvider = (props: NovuProviderProps) => {\n const applicationIdentifier = props.applicationIdentifier || '';\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId: props.subscriberId, subscriber: props.subscriber }),\n [props.subscriberId, props.subscriber]\n );\n\n const {\n children,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n defaultSchedule,\n context,\n realtime = true,\n } = props;\n\n const value = useMemo(\n () => ({\n novu: new Novu({\n applicationIdentifier,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n subscriber: subscriberObj,\n defaultSchedule,\n context,\n }),\n realtime,\n }),\n [\n applicationIdentifier,\n subscriberHash,\n subscriberObj,\n context,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n socketOptions,\n useCache,\n realtime,\n ]\n );\n\n return <NovuContext.Provider value={value}>{children}</NovuContext.Provider>;\n};\n\nexport const useNovu = () => {\n const context = useContext(NovuContext);\n if (!context.novu) {\n throw new Error('useNovu must be used within a <NovuProvider />');\n }\n\n return context.novu;\n};\n\nexport const useUnsafeNovu = () => {\n const context = useContext(NovuContext);\n\n return context.novu;\n};\n\nexport const useRealtime = () => {\n const context = useContext(NovuContext);\n\n return context.realtime;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkC;AAClC,sBAAgC;AAChC,mBAA8D;AAoC1D;AApBJ,IAAM,kBAAc,4BAAiD,EAAE,MAAM,QAAkB,UAAU,KAAK,CAAC;AAExG,IAAM,eAAe,CAAC,UAA6B;AACxD,QAAM,EAAE,cAAc,WAAW,MAAM,GAAG,yBAAyB,IAAI;AACvE,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACpE,CAAC,cAAc,MAAM,UAAU;AAAA,EACjC;AACA,QAAM,wBAAwB,yBAAyB,wBACnD,yBAAyB,wBACzB;AAEJ,QAAM,gBAAmC;AAAA,IACvC,GAAG;AAAA,IACH;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACF;AAEA,SACE,4CAAC,wBAAsB,GAAG,eAAe,uBACtC,gBAAM,UACT;AAEJ;AAKO,IAAM,uBAAuB,CAAC,UAA6B;AAChE,QAAM,wBAAwB,MAAM,yBAAyB;AAC7D,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,MAAM,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACxF,CAAC,MAAM,cAAc,MAAM,UAAU;AAAA,EACvC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,YAAQ;AAAA,IACZ,OAAO;AAAA,MACL,MAAM,IAAI,eAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAe,UAAS;AACvD;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,QAAQ,MAAM;AACjB,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,SAAO,QAAQ;AACjB;AAEO,IAAM,gBAAgB,MAAM;AACjC,QAAM,cAAU,yBAAW,WAAW;AAEtC,SAAO,QAAQ;AACjB;AAEO,IAAM,cAAc,MAAM;AAC/B,QAAM,cAAU,yBAAW,WAAW;AAEtC,SAAO,QAAQ;AACjB;","names":[]}
@@ -3,6 +3,16 @@ import { NovuOptions, Novu } from '@novu/js';
3
3
  import { ReactNode } from 'react';
4
4
 
5
5
  type NovuProviderProps = NovuOptions & {
6
+ /**
7
+ * When `false`, disables the WebSocket subscription that auto-injects
8
+ * newly received notifications into the list and subscription that auto-resync
9
+ * notification counts. Built-in mutations like
10
+ * `readAll`, `seenAll`, `archiveAll`, and `archiveAllRead` continue to
11
+ * update local state. Use this when you want to drive new-notification updates yourself (e.g.
12
+ * via your own `novu.on('notifications.notification_received', ...)`
13
+ * handler combined with `refetch()`). Defaults to `true`.
14
+ */
15
+ realtime?: boolean;
6
16
  children: ReactNode;
7
17
  };
8
18
  declare const NovuProvider: (props: NovuProviderProps) => react_jsx_runtime.JSX.Element;
@@ -11,6 +21,7 @@ declare const NovuProvider: (props: NovuProviderProps) => react_jsx_runtime.JSX.
11
21
  */
12
22
  declare const InternalNovuProvider: (props: NovuProviderProps) => react_jsx_runtime.JSX.Element;
13
23
  declare const useNovu: () => Novu;
14
- declare const useUnsafeNovu: () => Novu | undefined;
24
+ declare const useUnsafeNovu: () => Novu;
25
+ declare const useRealtime: () => boolean;
15
26
 
16
- export { InternalNovuProvider, NovuProvider, type NovuProviderProps, useNovu, useUnsafeNovu };
27
+ export { InternalNovuProvider, NovuProvider, type NovuProviderProps, useNovu, useRealtime, useUnsafeNovu };
@@ -30,8 +30,13 @@ __export(hooks_exports, {
30
30
  module.exports = __toCommonJS(hooks_exports);
31
31
  var import_js = require("@novu/js");
32
32
  var import_NovuProvider = require("./NovuProvider.cjs");
33
+ __reExport(hooks_exports, require("./useChannelConnection.cjs"), module.exports);
34
+ __reExport(hooks_exports, require("./useChannelConnections.cjs"), module.exports);
35
+ __reExport(hooks_exports, require("./useChannelEndpoint.cjs"), module.exports);
33
36
  __reExport(hooks_exports, require("./useCounts.cjs"), module.exports);
37
+ __reExport(hooks_exports, require("./useCreateChannelEndpoint.cjs"), module.exports);
34
38
  __reExport(hooks_exports, require("./useCreateSubscription.cjs"), module.exports);
39
+ __reExport(hooks_exports, require("./useDeleteChannelEndpoint.cjs"), module.exports);
35
40
  __reExport(hooks_exports, require("./useNotifications.cjs"), module.exports);
36
41
  __reExport(hooks_exports, require("./usePreferences.cjs"), module.exports);
37
42
  __reExport(hooks_exports, require("./useRemoveSubscription.cjs"), module.exports);
@@ -46,8 +51,13 @@ __reExport(hooks_exports, require("./useUpdateSubscription.cjs"), module.exports
46
51
  SeverityLevelEnum,
47
52
  WorkflowCriticalityEnum,
48
53
  useNovu,
54
+ ...require("./useChannelConnection.cjs"),
55
+ ...require("./useChannelConnections.cjs"),
56
+ ...require("./useChannelEndpoint.cjs"),
49
57
  ...require("./useCounts.cjs"),
58
+ ...require("./useCreateChannelEndpoint.cjs"),
50
59
  ...require("./useCreateSubscription.cjs"),
60
+ ...require("./useDeleteChannelEndpoint.cjs"),
51
61
  ...require("./useNotifications.cjs"),
52
62
  ...require("./usePreferences.cjs"),
53
63
  ...require("./useRemoveSubscription.cjs"),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\nexport { NovuProvider, useNovu } from './NovuProvider';\nexport * from './useCounts';\nexport * from './useCreateSubscription';\nexport * from './useNotifications';\nexport * from './usePreferences';\nexport * from './useRemoveSubscription';\nexport * from './useSchedule';\nexport * from './useSubscription';\nexport * from './useSubscriptions';\nexport * from './useUpdateSubscription';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAA4E;AAC5E,0BAAsC;AACtC,0BAAc,4BAHd;AAIA,0BAAc,wCAJd;AAKA,0BAAc,mCALd;AAMA,0BAAc,iCANd;AAOA,0BAAc,wCAPd;AAQA,0BAAc,8BARd;AASA,0BAAc,kCATd;AAUA,0BAAc,mCAVd;AAWA,0BAAc,wCAXd;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\nexport { NovuProvider, useNovu } from './NovuProvider';\nexport * from './useChannelConnection';\nexport * from './useChannelConnections';\nexport * from './useChannelEndpoint';\nexport * from './useCounts';\nexport * from './useCreateChannelEndpoint';\nexport * from './useCreateSubscription';\nexport * from './useDeleteChannelEndpoint';\nexport * from './useNotifications';\nexport * from './usePreferences';\nexport * from './useRemoveSubscription';\nexport * from './useSchedule';\nexport * from './useSubscription';\nexport * from './useSubscriptions';\nexport * from './useUpdateSubscription';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAA4E;AAC5E,0BAAsC;AACtC,0BAAc,uCAHd;AAIA,0BAAc,wCAJd;AAKA,0BAAc,qCALd;AAMA,0BAAc,4BANd;AAOA,0BAAc,2CAPd;AAQA,0BAAc,wCARd;AASA,0BAAc,2CATd;AAUA,0BAAc,mCAVd;AAWA,0BAAc,iCAXd;AAYA,0BAAc,wCAZd;AAaA,0BAAc,8BAbd;AAcA,0BAAc,kCAdd;AAeA,0BAAc,mCAfd;AAgBA,0BAAc,wCAhBd;","names":[]}
@@ -1,8 +1,13 @@
1
1
  export * from '@novu/js';
2
2
  export { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';
3
3
  export { NovuProvider, useNovu } from './NovuProvider.cjs';
4
+ export { UseChannelConnectionProps, UseChannelConnectionResult, useChannelConnection } from './useChannelConnection.cjs';
5
+ export { UseChannelConnectionsProps, UseChannelConnectionsResult, useChannelConnections } from './useChannelConnections.cjs';
6
+ export { UseChannelEndpointProps, UseChannelEndpointResult, useChannelEndpoint } from './useChannelEndpoint.cjs';
4
7
  export { UseCountsProps, UseCountsResult, useCounts } from './useCounts.cjs';
8
+ export { UseCreateChannelEndpointProps, UseCreateChannelEndpointResult, useCreateChannelEndpoint } from './useCreateChannelEndpoint.cjs';
5
9
  export { UseCreateSubscriptionProps, UseCreateSubscriptionResult, useCreateSubscription } from './useCreateSubscription.cjs';
10
+ export { UseDeleteChannelEndpointProps, UseDeleteChannelEndpointResult, useDeleteChannelEndpoint } from './useDeleteChannelEndpoint.cjs';
6
11
  export { UseNotificationsProps, UseNotificationsResult, useNotifications } from './useNotifications.cjs';
7
12
  export { UsePreferencesProps, UsePreferencesResult, usePreferences } from './usePreferences.cjs';
8
13
  export { UseRemoveSubscriptionProps, UseRemoveSubscriptionResult, useRemoveSubscription } from './useRemoveSubscription.cjs';
@@ -26,15 +26,18 @@ module.exports = __toCommonJS(useBrowserTabsChannel_exports);
26
26
  var import_react = require("react");
27
27
  var useBrowserTabsChannel = ({
28
28
  channelName,
29
- onMessage
29
+ onMessage,
30
+ enabled = true
30
31
  }) => {
31
32
  const [tabsChannel] = (0, import_react.useState)(
32
33
  typeof BroadcastChannel !== "undefined" ? new BroadcastChannel(channelName) : void 0
33
34
  );
34
35
  const postMessage = (data) => {
36
+ if (!enabled) return;
35
37
  tabsChannel == null ? void 0 : tabsChannel.postMessage(data);
36
38
  };
37
39
  (0, import_react.useEffect)(() => {
40
+ if (!enabled) return;
38
41
  const listener = (event) => {
39
42
  onMessage(event.data);
40
43
  };
@@ -42,7 +45,7 @@ var useBrowserTabsChannel = ({
42
45
  return () => {
43
46
  tabsChannel == null ? void 0 : tabsChannel.removeEventListener("message", listener);
44
47
  };
45
- }, []);
48
+ }, [enabled]);
46
49
  return { postMessage };
47
50
  };
48
51
  // Annotate the CommonJS export names for ESM import in node:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/hooks/internal/useBrowserTabsChannel.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const useBrowserTabsChannel = <T = unknown>({\n channelName,\n onMessage,\n}: {\n channelName: string;\n onMessage: (args: T) => void;\n}) => {\n const [tabsChannel] = useState(\n typeof BroadcastChannel !== 'undefined' ? new BroadcastChannel(channelName) : undefined\n );\n\n const postMessage = (data: T) => {\n tabsChannel?.postMessage(data);\n };\n\n useEffect(() => {\n const listener = (event: MessageEvent<T>) => {\n onMessage(event.data);\n };\n\n tabsChannel?.addEventListener('message', listener);\n\n return () => {\n tabsChannel?.removeEventListener('message', listener);\n };\n }, []);\n\n return { postMessage };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoC;AAE7B,IAAM,wBAAwB,CAAc;AAAA,EACjD;AAAA,EACA;AACF,MAGM;AACJ,QAAM,CAAC,WAAW,QAAI;AAAA,IACpB,OAAO,qBAAqB,cAAc,IAAI,iBAAiB,WAAW,IAAI;AAAA,EAChF;AAEA,QAAM,cAAc,CAAC,SAAY;AAC/B,+CAAa,YAAY;AAAA,EAC3B;AAEA,8BAAU,MAAM;AACd,UAAM,WAAW,CAAC,UAA2B;AAC3C,gBAAU,MAAM,IAAI;AAAA,IACtB;AAEA,+CAAa,iBAAiB,WAAW;AAEzC,WAAO,MAAM;AACX,iDAAa,oBAAoB,WAAW;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,YAAY;AACvB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/hooks/internal/useBrowserTabsChannel.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const useBrowserTabsChannel = <T = unknown>({\n channelName,\n onMessage,\n enabled = true,\n}: {\n channelName: string;\n onMessage: (args: T) => void;\n enabled?: boolean;\n}) => {\n const [tabsChannel] = useState(\n typeof BroadcastChannel !== 'undefined' ? new BroadcastChannel(channelName) : undefined\n );\n\n const postMessage = (data: T) => {\n if (!enabled) return;\n tabsChannel?.postMessage(data);\n };\n\n useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MessageEvent<T>) => {\n onMessage(event.data);\n };\n\n tabsChannel?.addEventListener('message', listener);\n\n return () => {\n tabsChannel?.removeEventListener('message', listener);\n };\n }, [enabled]);\n\n return { postMessage };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoC;AAE7B,IAAM,wBAAwB,CAAc;AAAA,EACjD;AAAA,EACA;AAAA,EACA,UAAU;AACZ,MAIM;AACJ,QAAM,CAAC,WAAW,QAAI;AAAA,IACpB,OAAO,qBAAqB,cAAc,IAAI,iBAAiB,WAAW,IAAI;AAAA,EAChF;AAEA,QAAM,cAAc,CAAC,SAAY;AAC/B,QAAI,CAAC,QAAS;AACd,+CAAa,YAAY;AAAA,EAC3B;AAEA,8BAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAEd,UAAM,WAAW,CAAC,UAA2B;AAC3C,gBAAU,MAAM,IAAI;AAAA,IACtB;AAEA,+CAAa,iBAAiB,WAAW;AAEzC,WAAO,MAAM;AACX,iDAAa,oBAAoB,WAAW;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO,EAAE,YAAY;AACvB;","names":[]}
@@ -1,6 +1,7 @@
1
- declare const useBrowserTabsChannel: <T = unknown>({ channelName, onMessage, }: {
1
+ declare const useBrowserTabsChannel: <T = unknown>({ channelName, onMessage, enabled, }: {
2
2
  channelName: string;
3
3
  onMessage: (args: T) => void;
4
+ enabled?: boolean;
4
5
  }) => {
5
6
  postMessage: (data: T) => void;
6
7
  };
@@ -29,19 +29,22 @@ var import_NovuProvider = require("../NovuProvider.cjs");
29
29
  var import_useBrowserTabsChannel = require("./useBrowserTabsChannel.cjs");
30
30
  var useWebSocketEvent = ({
31
31
  event: webSocketEvent,
32
- eventHandler: onMessage
32
+ eventHandler: onMessage,
33
+ enabled = true
33
34
  }) => {
34
35
  const novu = (0, import_NovuProvider.useNovu)();
35
36
  const channelName = `nv_ws_connection:a=${novu.applicationIdentifier}:s=${novu.subscriberId}:c=${novu.contextKey}:e=${webSocketEvent}`;
36
37
  const { postMessage } = (0, import_useBrowserTabsChannel.useBrowserTabsChannel)({
37
38
  channelName,
38
- onMessage
39
+ onMessage,
40
+ enabled
39
41
  });
40
42
  const updateReadCount = (data) => {
41
43
  onMessage(data);
42
44
  postMessage(data);
43
45
  };
44
46
  (0, import_react.useEffect)(() => {
47
+ if (!enabled) return;
45
48
  let cleanup;
46
49
  const resolveLock = (0, import_requestLock.requestLock)(channelName, () => {
47
50
  cleanup = novu.on(webSocketEvent, updateReadCount);
@@ -52,7 +55,7 @@ var useWebSocketEvent = ({
52
55
  }
53
56
  resolveLock();
54
57
  };
55
- }, []);
58
+ }, [enabled]);
56
59
  };
57
60
  // Annotate the CommonJS export names for ESM import in node:
58
61
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/hooks/internal/useWebsocketEvent.ts"],"sourcesContent":["import { EventHandler, Events, SocketEventNames } from '@novu/js';\nimport { useEffect } from 'react';\nimport { requestLock } from '../../utils/requestLock';\nimport { useNovu } from '../NovuProvider';\nimport { useBrowserTabsChannel } from './useBrowserTabsChannel';\n\nexport const useWebSocketEvent = <E extends SocketEventNames>({\n event: webSocketEvent,\n eventHandler: onMessage,\n}: {\n event: E;\n eventHandler: (args: Events[E]) => void;\n}) => {\n const novu = useNovu();\n const channelName = `nv_ws_connection:a=${novu.applicationIdentifier}:s=${novu.subscriberId}:c=${novu.contextKey}:e=${webSocketEvent}`;\n\n const { postMessage } = useBrowserTabsChannel({\n channelName,\n onMessage,\n });\n\n const updateReadCount: EventHandler<Events[E]> = (data) => {\n onMessage(data);\n postMessage(data);\n };\n\n useEffect(() => {\n let cleanup: () => void;\n const resolveLock = requestLock(channelName, () => {\n cleanup = novu.on(webSocketEvent, updateReadCount);\n });\n\n return () => {\n if (cleanup) {\n cleanup();\n }\n\n resolveLock();\n };\n }, []);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA0B;AAC1B,yBAA4B;AAC5B,0BAAwB;AACxB,mCAAsC;AAE/B,IAAM,oBAAoB,CAA6B;AAAA,EAC5D,OAAO;AAAA,EACP,cAAc;AAChB,MAGM;AACJ,QAAM,WAAO,6BAAQ;AACrB,QAAM,cAAc,sBAAsB,KAAK,qBAAqB,MAAM,KAAK,YAAY,MAAM,KAAK,UAAU,MAAM,cAAc;AAEpI,QAAM,EAAE,YAAY,QAAI,oDAAsB;AAAA,IAC5C;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,kBAA2C,CAAC,SAAS;AACzD,cAAU,IAAI;AACd,gBAAY,IAAI;AAAA,EAClB;AAEA,8BAAU,MAAM;AACd,QAAI;AACJ,UAAM,kBAAc,gCAAY,aAAa,MAAM;AACjD,gBAAU,KAAK,GAAG,gBAAgB,eAAe;AAAA,IACnD,CAAC;AAED,WAAO,MAAM;AACX,UAAI,SAAS;AACX,gBAAQ;AAAA,MACV;AAEA,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,CAAC;AACP;","names":[]}
1
+ {"version":3,"sources":["../../../../src/hooks/internal/useWebsocketEvent.ts"],"sourcesContent":["import { EventHandler, Events, SocketEventNames } from '@novu/js';\nimport { useEffect } from 'react';\nimport { requestLock } from '../../utils/requestLock';\nimport { useNovu } from '../NovuProvider';\nimport { useBrowserTabsChannel } from './useBrowserTabsChannel';\n\nexport const useWebSocketEvent = <E extends SocketEventNames>({\n event: webSocketEvent,\n eventHandler: onMessage,\n enabled = true,\n}: {\n event: E;\n eventHandler: (args: Events[E]) => void;\n enabled?: boolean;\n}) => {\n const novu = useNovu();\n const channelName = `nv_ws_connection:a=${novu.applicationIdentifier}:s=${novu.subscriberId}:c=${novu.contextKey}:e=${webSocketEvent}`;\n\n const { postMessage } = useBrowserTabsChannel({\n channelName,\n onMessage,\n enabled,\n });\n\n const updateReadCount: EventHandler<Events[E]> = (data) => {\n onMessage(data);\n postMessage(data);\n };\n\n useEffect(() => {\n if (!enabled) return;\n\n let cleanup: () => void;\n const resolveLock = requestLock(channelName, () => {\n cleanup = novu.on(webSocketEvent, updateReadCount);\n });\n\n return () => {\n if (cleanup) {\n cleanup();\n }\n\n resolveLock();\n };\n }, [enabled]);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA0B;AAC1B,yBAA4B;AAC5B,0BAAwB;AACxB,mCAAsC;AAE/B,IAAM,oBAAoB,CAA6B;AAAA,EAC5D,OAAO;AAAA,EACP,cAAc;AAAA,EACd,UAAU;AACZ,MAIM;AACJ,QAAM,WAAO,6BAAQ;AACrB,QAAM,cAAc,sBAAsB,KAAK,qBAAqB,MAAM,KAAK,YAAY,MAAM,KAAK,UAAU,MAAM,cAAc;AAEpI,QAAM,EAAE,YAAY,QAAI,oDAAsB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,kBAA2C,CAAC,SAAS;AACzD,cAAU,IAAI;AACd,gBAAY,IAAI;AAAA,EAClB;AAEA,8BAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAEd,QAAI;AACJ,UAAM,kBAAc,gCAAY,aAAa,MAAM;AACjD,gBAAU,KAAK,GAAG,gBAAgB,eAAe;AAAA,IACnD,CAAC;AAED,WAAO,MAAM;AACX,UAAI,SAAS;AACX,gBAAQ;AAAA,MACV;AAEA,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AACd;","names":[]}
@@ -1,8 +1,9 @@
1
1
  import { SocketEventNames, Events } from '@novu/js';
2
2
 
3
- declare const useWebSocketEvent: <E extends SocketEventNames>({ event: webSocketEvent, eventHandler: onMessage, }: {
3
+ declare const useWebSocketEvent: <E extends SocketEventNames>({ event: webSocketEvent, eventHandler: onMessage, enabled, }: {
4
4
  event: E;
5
5
  eventHandler: (args: Events[E]) => void;
6
+ enabled?: boolean;
6
7
  }) => void;
7
8
 
8
9
  export { useWebSocketEvent };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/useChannelConnection.ts
21
+ var useChannelConnection_exports = {};
22
+ __export(useChannelConnection_exports, {
23
+ useChannelConnection: () => useChannelConnection
24
+ });
25
+ module.exports = __toCommonJS(useChannelConnection_exports);
26
+ var import_react = require("react");
27
+ var import_NovuProvider = require("./NovuProvider.cjs");
28
+ var useChannelConnection = (props) => {
29
+ const novu = (0, import_NovuProvider.useNovu)();
30
+ const propsRef = (0, import_react.useRef)(props);
31
+ propsRef.current = props;
32
+ const [connection, setConnection] = (0, import_react.useState)();
33
+ const [error, setError] = (0, import_react.useState)();
34
+ const [isLoading, setIsLoading] = (0, import_react.useState)(true);
35
+ const [isFetching, setIsFetching] = (0, import_react.useState)(false);
36
+ const fetchConnection = (0, import_react.useCallback)(
37
+ async (options) => {
38
+ const { identifier, onSuccess, onError } = propsRef.current;
39
+ if (options == null ? void 0 : options.refetch) {
40
+ setError(void 0);
41
+ setIsLoading(true);
42
+ }
43
+ setIsFetching(true);
44
+ const response = await novu.channelConnections.get({ identifier });
45
+ if (response.error) {
46
+ setError(response.error);
47
+ onError == null ? void 0 : onError(response.error);
48
+ } else if (response.data !== void 0) {
49
+ onSuccess == null ? void 0 : onSuccess(response.data);
50
+ setConnection(response.data);
51
+ }
52
+ setIsLoading(false);
53
+ setIsFetching(false);
54
+ },
55
+ [novu]
56
+ );
57
+ (0, import_react.useEffect)(() => {
58
+ const cleanupGetPending = novu.on("channel-connection.get.pending", ({ args }) => {
59
+ if (!args || args.identifier !== propsRef.current.identifier) {
60
+ return;
61
+ }
62
+ setIsFetching(true);
63
+ });
64
+ const cleanupGetResolved = novu.on("channel-connection.get.resolved", ({ args, data, error: resolvedError }) => {
65
+ if (!args || args.identifier !== propsRef.current.identifier) {
66
+ return;
67
+ }
68
+ const { onSuccess, onError } = propsRef.current;
69
+ if (resolvedError) {
70
+ setError(resolvedError);
71
+ onError == null ? void 0 : onError(resolvedError);
72
+ } else {
73
+ setConnection(data ?? null);
74
+ onSuccess == null ? void 0 : onSuccess(data ?? null);
75
+ }
76
+ setIsFetching(false);
77
+ });
78
+ const cleanupDeleteResolved = novu.on("channel-connection.delete.resolved", ({ args }) => {
79
+ var _a, _b;
80
+ if (!args || args.identifier !== propsRef.current.identifier) {
81
+ return;
82
+ }
83
+ setConnection(null);
84
+ (_b = (_a = propsRef.current).onSuccess) == null ? void 0 : _b.call(_a, null);
85
+ setIsFetching(false);
86
+ });
87
+ void fetchConnection({ refetch: true });
88
+ return () => {
89
+ cleanupGetPending();
90
+ cleanupGetResolved();
91
+ cleanupDeleteResolved();
92
+ };
93
+ }, [novu, fetchConnection, props.identifier]);
94
+ const refetch = (0, import_react.useCallback)(() => fetchConnection({ refetch: true }), [fetchConnection]);
95
+ return {
96
+ connection,
97
+ error,
98
+ isLoading,
99
+ isFetching,
100
+ refetch
101
+ };
102
+ };
103
+ // Annotate the CommonJS export names for ESM import in node:
104
+ 0 && (module.exports = {
105
+ useChannelConnection
106
+ });
107
+ //# sourceMappingURL=useChannelConnection.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useChannelConnection.ts"],"sourcesContent":["import type { ChannelConnectionResponse, NovuError } from '@novu/js';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UseChannelConnectionProps = {\n identifier: string;\n onSuccess?: (data: ChannelConnectionResponse | null) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseChannelConnectionResult = {\n connection?: ChannelConnectionResponse | null;\n error?: NovuError;\n isLoading: boolean;\n isFetching: boolean;\n refetch: () => Promise<void>;\n};\n\n/**\n * Get a channel connection by identifier.\n */\nexport const useChannelConnection = (props: UseChannelConnectionProps): UseChannelConnectionResult => {\n const novu = useNovu();\n const propsRef = useRef<UseChannelConnectionProps>(props);\n propsRef.current = props;\n\n const [connection, setConnection] = useState<ChannelConnectionResponse | null>();\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n\n const fetchConnection = useCallback(\n async (options?: { refetch: boolean }) => {\n const { identifier, onSuccess, onError } = propsRef.current;\n if (options?.refetch) {\n setError(undefined);\n setIsLoading(true);\n }\n\n setIsFetching(true);\n\n const response = await novu.channelConnections.get({ identifier });\n\n if (response.error) {\n setError(response.error as NovuError);\n onError?.(response.error as NovuError);\n } else if (response.data !== undefined) {\n onSuccess?.(response.data);\n setConnection(response.data);\n }\n setIsLoading(false);\n setIsFetching(false);\n },\n [novu]\n );\n\n // props.identifier triggers a re-fetch and re-registration whenever the\n // caller switches to a different identifier; fetchConnection reads it from\n // propsRef at call-time so it doesn't appear in the callback body directly.\n // biome-ignore lint/correctness/useExhaustiveDependencies: props.identifier is an intentional trigger dependency\n useEffect(() => {\n const cleanupGetPending = novu.on('channel-connection.get.pending', ({ args }) => {\n if (!args || args.identifier !== propsRef.current.identifier) {\n return;\n }\n setIsFetching(true);\n });\n\n const cleanupGetResolved = novu.on('channel-connection.get.resolved', ({ args, data, error: resolvedError }) => {\n if (!args || args.identifier !== propsRef.current.identifier) {\n return;\n }\n const { onSuccess, onError } = propsRef.current;\n if (resolvedError) {\n setError(resolvedError as NovuError);\n onError?.(resolvedError as NovuError);\n } else {\n setConnection((data as ChannelConnectionResponse) ?? null);\n onSuccess?.((data as ChannelConnectionResponse) ?? null);\n }\n setIsFetching(false);\n });\n\n const cleanupDeleteResolved = novu.on('channel-connection.delete.resolved', ({ args }) => {\n if (!args || args.identifier !== propsRef.current.identifier) {\n return;\n }\n setConnection(null);\n propsRef.current.onSuccess?.(null);\n setIsFetching(false);\n });\n\n void fetchConnection({ refetch: true });\n\n return () => {\n cleanupGetPending();\n cleanupGetResolved();\n cleanupDeleteResolved();\n };\n }, [novu, fetchConnection, props.identifier]);\n\n const refetch = useCallback(() => fetchConnection({ refetch: true }), [fetchConnection]);\n\n return {\n connection,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAyD;AACzD,0BAAwB;AAmBjB,IAAM,uBAAuB,CAAC,UAAiE;AACpG,QAAM,WAAO,6BAAQ;AACrB,QAAM,eAAW,qBAAkC,KAAK;AACxD,WAAS,UAAU;AAEnB,QAAM,CAAC,YAAY,aAAa,QAAI,uBAA2C;AAC/E,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAElD,QAAM,sBAAkB;AAAA,IACtB,OAAO,YAAmC;AACxC,YAAM,EAAE,YAAY,WAAW,QAAQ,IAAI,SAAS;AACpD,UAAI,mCAAS,SAAS;AACpB,iBAAS,MAAS;AAClB,qBAAa,IAAI;AAAA,MACnB;AAEA,oBAAc,IAAI;AAElB,YAAM,WAAW,MAAM,KAAK,mBAAmB,IAAI,EAAE,WAAW,CAAC;AAEjE,UAAI,SAAS,OAAO;AAClB,iBAAS,SAAS,KAAkB;AACpC,2CAAU,SAAS;AAAA,MACrB,WAAW,SAAS,SAAS,QAAW;AACtC,+CAAY,SAAS;AACrB,sBAAc,SAAS,IAAI;AAAA,MAC7B;AACA,mBAAa,KAAK;AAClB,oBAAc,KAAK;AAAA,IACrB;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAMA,8BAAU,MAAM;AACd,UAAM,oBAAoB,KAAK,GAAG,kCAAkC,CAAC,EAAE,KAAK,MAAM;AAChF,UAAI,CAAC,QAAQ,KAAK,eAAe,SAAS,QAAQ,YAAY;AAC5D;AAAA,MACF;AACA,oBAAc,IAAI;AAAA,IACpB,CAAC;AAED,UAAM,qBAAqB,KAAK,GAAG,mCAAmC,CAAC,EAAE,MAAM,MAAM,OAAO,cAAc,MAAM;AAC9G,UAAI,CAAC,QAAQ,KAAK,eAAe,SAAS,QAAQ,YAAY;AAC5D;AAAA,MACF;AACA,YAAM,EAAE,WAAW,QAAQ,IAAI,SAAS;AACxC,UAAI,eAAe;AACjB,iBAAS,aAA0B;AACnC,2CAAU;AAAA,MACZ,OAAO;AACL,sBAAe,QAAsC,IAAI;AACzD,+CAAa,QAAsC;AAAA,MACrD;AACA,oBAAc,KAAK;AAAA,IACrB,CAAC;AAED,UAAM,wBAAwB,KAAK,GAAG,sCAAsC,CAAC,EAAE,KAAK,MAAM;AAnF9F;AAoFM,UAAI,CAAC,QAAQ,KAAK,eAAe,SAAS,QAAQ,YAAY;AAC5D;AAAA,MACF;AACA,oBAAc,IAAI;AAClB,2BAAS,SAAQ,cAAjB,4BAA6B;AAC7B,oBAAc,KAAK;AAAA,IACrB,CAAC;AAED,SAAK,gBAAgB,EAAE,SAAS,KAAK,CAAC;AAEtC,WAAO,MAAM;AACX,wBAAkB;AAClB,yBAAmB;AACnB,4BAAsB;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,MAAM,iBAAiB,MAAM,UAAU,CAAC;AAE5C,QAAM,cAAU,0BAAY,MAAM,gBAAgB,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;AAEvF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { ChannelConnectionResponse, NovuError } from '@novu/js';
2
+
3
+ type UseChannelConnectionProps = {
4
+ identifier: string;
5
+ onSuccess?: (data: ChannelConnectionResponse | null) => void;
6
+ onError?: (error: NovuError) => void;
7
+ };
8
+ type UseChannelConnectionResult = {
9
+ connection?: ChannelConnectionResponse | null;
10
+ error?: NovuError;
11
+ isLoading: boolean;
12
+ isFetching: boolean;
13
+ refetch: () => Promise<void>;
14
+ };
15
+ /**
16
+ * Get a channel connection by identifier.
17
+ */
18
+ declare const useChannelConnection: (props: UseChannelConnectionProps) => UseChannelConnectionResult;
19
+
20
+ export { type UseChannelConnectionProps, type UseChannelConnectionResult, useChannelConnection };
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/useChannelConnections.ts
21
+ var useChannelConnections_exports = {};
22
+ __export(useChannelConnections_exports, {
23
+ useChannelConnections: () => useChannelConnections
24
+ });
25
+ module.exports = __toCommonJS(useChannelConnections_exports);
26
+ var import_react = require("react");
27
+ var import_NovuProvider = require("./NovuProvider.cjs");
28
+ var useChannelConnections = (props = {}) => {
29
+ const novu = (0, import_NovuProvider.useNovu)();
30
+ const propsRef = (0, import_react.useRef)(props);
31
+ propsRef.current = props;
32
+ const [connections, setConnections] = (0, import_react.useState)([]);
33
+ const [error, setError] = (0, import_react.useState)();
34
+ const [isLoading, setIsLoading] = (0, import_react.useState)(true);
35
+ const [isFetching, setIsFetching] = (0, import_react.useState)(false);
36
+ const fetchConnections = (0, import_react.useCallback)(
37
+ async (options) => {
38
+ const { onSuccess, onError, ...listArgs } = propsRef.current;
39
+ if (options == null ? void 0 : options.refetch) {
40
+ setError(void 0);
41
+ setIsLoading(true);
42
+ }
43
+ setIsFetching(true);
44
+ try {
45
+ const response = await novu.channelConnections.list(listArgs);
46
+ if (response.error) {
47
+ setError(response.error);
48
+ onError == null ? void 0 : onError(response.error);
49
+ } else if (response.data !== void 0) {
50
+ setConnections(response.data);
51
+ onSuccess == null ? void 0 : onSuccess(response.data);
52
+ }
53
+ } catch (err) {
54
+ setError(err);
55
+ onError == null ? void 0 : onError(err);
56
+ } finally {
57
+ setIsLoading(false);
58
+ setIsFetching(false);
59
+ }
60
+ },
61
+ [novu]
62
+ );
63
+ (0, import_react.useEffect)(() => {
64
+ const cleanupDeleteResolved = novu.on("channel-connection.delete.resolved", () => {
65
+ void fetchConnections({ refetch: true });
66
+ });
67
+ void fetchConnections({ refetch: true });
68
+ return () => {
69
+ cleanupDeleteResolved();
70
+ };
71
+ }, [novu, fetchConnections]);
72
+ const refetch = (0, import_react.useCallback)(() => fetchConnections({ refetch: true }), [fetchConnections]);
73
+ return {
74
+ connections,
75
+ error,
76
+ isLoading,
77
+ isFetching,
78
+ refetch
79
+ };
80
+ };
81
+ // Annotate the CommonJS export names for ESM import in node:
82
+ 0 && (module.exports = {
83
+ useChannelConnections
84
+ });
85
+ //# sourceMappingURL=useChannelConnections.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useChannelConnections.ts"],"sourcesContent":["import type { ChannelConnectionResponse, ListChannelConnectionsArgs, NovuError } from '@novu/js';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UseChannelConnectionsProps = ListChannelConnectionsArgs & {\n onSuccess?: (data: ChannelConnectionResponse[]) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseChannelConnectionsResult = {\n connections: ChannelConnectionResponse[];\n error?: NovuError;\n isLoading: boolean;\n isFetching: boolean;\n refetch: () => Promise<void>;\n};\n\n/**\n * List channel connections for the current subscriber. Use this to discover an active\n * connection identifier after a chat OAuth flow so it can be passed to `LinkUser`.\n *\n * @example\n * const { connections } = useChannelConnections({ integrationIdentifier: 'my-chat-integration' });\n * const connectionIdentifier = connections[0]?.identifier;\n */\nexport const useChannelConnections = (props: UseChannelConnectionsProps = {}): UseChannelConnectionsResult => {\n const novu = useNovu();\n const propsRef = useRef<UseChannelConnectionsProps>(props);\n propsRef.current = props;\n\n const [connections, setConnections] = useState<ChannelConnectionResponse[]>([]);\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n\n const fetchConnections = useCallback(\n async (options?: { refetch: boolean }) => {\n const { onSuccess, onError, ...listArgs } = propsRef.current;\n\n if (options?.refetch) {\n setError(undefined);\n setIsLoading(true);\n }\n\n setIsFetching(true);\n\n try {\n const response = await novu.channelConnections.list(listArgs);\n\n if (response.error) {\n setError(response.error as NovuError);\n onError?.(response.error as NovuError);\n } else if (response.data !== undefined) {\n setConnections(response.data);\n onSuccess?.(response.data);\n }\n } catch (err) {\n setError(err as NovuError);\n onError?.(err as NovuError);\n } finally {\n setIsLoading(false);\n setIsFetching(false);\n }\n },\n [novu]\n );\n\n useEffect(() => {\n const cleanupDeleteResolved = novu.on('channel-connection.delete.resolved', () => {\n void fetchConnections({ refetch: true });\n });\n\n void fetchConnections({ refetch: true });\n\n return () => {\n cleanupDeleteResolved();\n };\n }, [novu, fetchConnections]);\n\n const refetch = useCallback(() => fetchConnections({ refetch: true }), [fetchConnections]);\n\n return {\n connections,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAyD;AACzD,0BAAwB;AAuBjB,IAAM,wBAAwB,CAAC,QAAoC,CAAC,MAAmC;AAC5G,QAAM,WAAO,6BAAQ;AACrB,QAAM,eAAW,qBAAmC,KAAK;AACzD,WAAS,UAAU;AAEnB,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAsC,CAAC,CAAC;AAC9E,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAElD,QAAM,uBAAmB;AAAA,IACvB,OAAO,YAAmC;AACxC,YAAM,EAAE,WAAW,SAAS,GAAG,SAAS,IAAI,SAAS;AAErD,UAAI,mCAAS,SAAS;AACpB,iBAAS,MAAS;AAClB,qBAAa,IAAI;AAAA,MACnB;AAEA,oBAAc,IAAI;AAElB,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,mBAAmB,KAAK,QAAQ;AAE5D,YAAI,SAAS,OAAO;AAClB,mBAAS,SAAS,KAAkB;AACpC,6CAAU,SAAS;AAAA,QACrB,WAAW,SAAS,SAAS,QAAW;AACtC,yBAAe,SAAS,IAAI;AAC5B,iDAAY,SAAS;AAAA,QACvB;AAAA,MACF,SAAS,KAAK;AACZ,iBAAS,GAAgB;AACzB,2CAAU;AAAA,MACZ,UAAE;AACA,qBAAa,KAAK;AAClB,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,8BAAU,MAAM;AACd,UAAM,wBAAwB,KAAK,GAAG,sCAAsC,MAAM;AAChF,WAAK,iBAAiB,EAAE,SAAS,KAAK,CAAC;AAAA,IACzC,CAAC;AAED,SAAK,iBAAiB,EAAE,SAAS,KAAK,CAAC;AAEvC,WAAO,MAAM;AACX,4BAAsB;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,MAAM,gBAAgB,CAAC;AAE3B,QAAM,cAAU,0BAAY,MAAM,iBAAiB,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAEzF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,24 @@
1
+ import { ListChannelConnectionsArgs, ChannelConnectionResponse, NovuError } from '@novu/js';
2
+
3
+ type UseChannelConnectionsProps = ListChannelConnectionsArgs & {
4
+ onSuccess?: (data: ChannelConnectionResponse[]) => void;
5
+ onError?: (error: NovuError) => void;
6
+ };
7
+ type UseChannelConnectionsResult = {
8
+ connections: ChannelConnectionResponse[];
9
+ error?: NovuError;
10
+ isLoading: boolean;
11
+ isFetching: boolean;
12
+ refetch: () => Promise<void>;
13
+ };
14
+ /**
15
+ * List channel connections for the current subscriber. Use this to discover an active
16
+ * connection identifier after a chat OAuth flow so it can be passed to `LinkUser`.
17
+ *
18
+ * @example
19
+ * const { connections } = useChannelConnections({ integrationIdentifier: 'my-chat-integration' });
20
+ * const connectionIdentifier = connections[0]?.identifier;
21
+ */
22
+ declare const useChannelConnections: (props?: UseChannelConnectionsProps) => UseChannelConnectionsResult;
23
+
24
+ export { type UseChannelConnectionsProps, type UseChannelConnectionsResult, useChannelConnections };