@novu/react 3.19.0 → 3.19.1-rc.56a8a168f8
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.
- package/dist/cjs/hooks/index.cjs +2 -2
- package/dist/cjs/hooks/index.cjs.map +1 -1
- package/dist/cjs/hooks/index.d.cts +1 -1
- package/dist/cjs/hooks/useWebChat.cjs +326 -0
- package/dist/cjs/hooks/useWebChat.cjs.map +1 -0
- package/dist/cjs/hooks/useWebChat.d.cts +117 -0
- package/dist/cjs/index.cjs +4 -4
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/server/index.cjs +22 -8
- package/dist/cjs/server/index.cjs.map +1 -1
- package/dist/cjs/server/index.d.cts +3 -3
- package/dist/esm/hooks/index.d.ts +1 -1
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/hooks/useWebChat.d.ts +117 -0
- package/dist/esm/hooks/useWebChat.js +294 -0
- package/dist/esm/hooks/useWebChat.js.map +1 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/index.d.ts +3 -3
- package/dist/esm/server/index.js +20 -6
- package/dist/esm/server/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/cjs/hooks/useAgentChat.cjs +0 -176
- package/dist/cjs/hooks/useAgentChat.cjs.map +0 -1
- package/dist/cjs/hooks/useAgentChat.d.cts +0 -29
- package/dist/esm/hooks/useAgentChat.d.ts +0 -29
- package/dist/esm/hooks/useAgentChat.js +0 -149
- package/dist/esm/hooks/useAgentChat.js.map +0 -1
package/dist/esm/index.js
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
TelegramConnectButton
|
|
18
18
|
} from "./components/index.js";
|
|
19
19
|
import {
|
|
20
|
-
|
|
20
|
+
useWebChat,
|
|
21
21
|
useChannelConnection,
|
|
22
22
|
useChannelConnections,
|
|
23
23
|
useChannelEndpoint,
|
|
@@ -53,7 +53,6 @@ export {
|
|
|
53
53
|
SubscriptionPreferences,
|
|
54
54
|
TelegramConnectButton,
|
|
55
55
|
WorkflowCriticalityEnum,
|
|
56
|
-
useAgentChat,
|
|
57
56
|
useChannelConnection,
|
|
58
57
|
useChannelConnections,
|
|
59
58
|
useChannelEndpoint,
|
|
@@ -69,6 +68,7 @@ export {
|
|
|
69
68
|
useSubscription,
|
|
70
69
|
useSubscriptions,
|
|
71
70
|
useTelegramSubscriberLink,
|
|
72
|
-
useUpdateSubscription
|
|
71
|
+
useUpdateSubscription,
|
|
72
|
+
useWebChat
|
|
73
73
|
};
|
|
74
74
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\n\nexport type {\n AllLocalization,\n AllLocalizationKey,\n ChannelConnectButtonIconKey,\n ElementStyles,\n InboxAppearance,\n InboxAppearanceCallback,\n InboxAppearanceCallbackFunction,\n InboxAppearanceCallbackKeys,\n InboxAppearanceKey,\n InboxElements,\n InboxLocalization,\n InboxLocalizationKey,\n InboxTheme,\n NotificationActionClickHandler,\n NotificationClickHandler,\n NotificationRenderer,\n PreferenceGroups,\n PreferencesFilter,\n RouterPush,\n SubscriptionAppearance,\n SubscriptionAppearanceCallback,\n SubscriptionAppearanceCallbackFunction,\n SubscriptionAppearanceCallbackKeys,\n SubscriptionAppearanceKey,\n SubscriptionElements,\n SubscriptionLocalization,\n SubscriptionLocalizationKey,\n SubscriptionTheme,\n Tab,\n Variables,\n} from '@novu/js/ui';\nexport type {\n BellProps,\n InboxContentProps,\n InboxProps,\n MsTeamsConnectButtonProps,\n MsTeamsLinkUserProps,\n NotificationProps,\n NovuProviderProps,\n SlackConnectButtonProps,\n SlackLinkUserProps,\n SubscriptionButtonProps,\n SubscriptionPreferencesProps,\n SubscriptionProps,\n TelegramConnectButtonProps,\n} from './components';\nexport {\n Bell,\n Inbox,\n InboxContent,\n MsTeamsConnectButton,\n MsTeamsLinkUser,\n Notifications,\n NovuProvider,\n Preferences,\n SlackConnectButton,\n SlackLinkUser,\n Subscription,\n SubscriptionButton,\n SubscriptionPreferences,\n TelegramConnectButton,\n} from './components';\nexport type {\n
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\n\nexport type {\n AllLocalization,\n AllLocalizationKey,\n ChannelConnectButtonIconKey,\n ElementStyles,\n InboxAppearance,\n InboxAppearanceCallback,\n InboxAppearanceCallbackFunction,\n InboxAppearanceCallbackKeys,\n InboxAppearanceKey,\n InboxElements,\n InboxLocalization,\n InboxLocalizationKey,\n InboxTheme,\n NotificationActionClickHandler,\n NotificationClickHandler,\n NotificationRenderer,\n PreferenceGroups,\n PreferencesFilter,\n RouterPush,\n SubscriptionAppearance,\n SubscriptionAppearanceCallback,\n SubscriptionAppearanceCallbackFunction,\n SubscriptionAppearanceCallbackKeys,\n SubscriptionAppearanceKey,\n SubscriptionElements,\n SubscriptionLocalization,\n SubscriptionLocalizationKey,\n SubscriptionTheme,\n Tab,\n Variables,\n} from '@novu/js/ui';\nexport type {\n BellProps,\n InboxContentProps,\n InboxProps,\n MsTeamsConnectButtonProps,\n MsTeamsLinkUserProps,\n NotificationProps,\n NovuProviderProps,\n SlackConnectButtonProps,\n SlackLinkUserProps,\n SubscriptionButtonProps,\n SubscriptionPreferencesProps,\n SubscriptionProps,\n TelegramConnectButtonProps,\n} from './components';\nexport {\n Bell,\n Inbox,\n InboxContent,\n MsTeamsConnectButton,\n MsTeamsLinkUser,\n Notifications,\n NovuProvider,\n Preferences,\n SlackConnectButton,\n SlackLinkUser,\n Subscription,\n SubscriptionButton,\n SubscriptionPreferences,\n TelegramConnectButton,\n} from './components';\nexport type {\n UseWebChatProps,\n UseWebChatResult,\n UseChannelConnectionProps,\n UseChannelConnectionResult,\n UseChannelConnectionsProps,\n UseChannelConnectionsResult,\n UseChannelEndpointProps,\n UseChannelEndpointResult,\n UseCountsProps,\n UseCountsResult,\n UseCreateChannelEndpointProps,\n UseCreateChannelEndpointResult,\n UseDeleteChannelEndpointProps,\n UseDeleteChannelEndpointResult,\n UseNotificationsProps,\n UseNotificationsResult,\n UsePreferencesResult,\n UseScheduleProps as UsePreferencesProps,\n UseTelegramSubscriberLinkProps,\n UseTelegramSubscriberLinkResult,\n} from './hooks';\nexport {\n useWebChat,\n useChannelConnection,\n useChannelConnections,\n useChannelEndpoint,\n useCounts,\n useCreateChannelEndpoint,\n useCreateSubscription,\n useDeleteChannelEndpoint,\n useNotifications,\n useNovu,\n usePreferences,\n useRemoveSubscription,\n useSchedule,\n useSubscription,\n useSubscriptions,\n useTelegramSubscriberLink,\n useUpdateSubscription,\n} from './hooks';\n\nexport type {\n BaseProps,\n BellRenderer,\n BodyRenderer,\n DefaultInboxProps,\n DefaultProps,\n NoRendererProps,\n NotificationRendererProps,\n NotificationsRenderer,\n ReactAllAppearance,\n ReactInboxAppearance,\n ReactInboxTheme,\n ReactSubscriptionAppearance,\n ReactSubscriptionTheme,\n SubjectBodyRendererProps,\n SubjectRenderer,\n WithChildrenProps,\n} from './utils/types';\n"],"mappings":";AACA,SAAS,iBAAiB,mBAAmB,+BAA+B;AAiD5E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -3,7 +3,7 @@ import { InboxProps } from '../components/Inbox.js';
|
|
|
3
3
|
export * from '@novu/js';
|
|
4
4
|
export { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';
|
|
5
5
|
import { NovuProviderProps } from '../hooks/NovuProvider.js';
|
|
6
|
-
import {
|
|
6
|
+
import { UseWebChatProps, UseWebChatResult } from '../hooks/useWebChat.js';
|
|
7
7
|
import { UseCountsProps, UseCountsResult } from '../hooks/useCounts.js';
|
|
8
8
|
import { UseCreateSubscriptionProps, UseCreateSubscriptionResult } from '../hooks/useCreateSubscription.js';
|
|
9
9
|
import { UseNotificationsProps, UseNotificationsResult } from '../hooks/useNotifications.js';
|
|
@@ -41,7 +41,7 @@ declare function MsTeamsConnectButton(): react_jsx_runtime.JSX.Element;
|
|
|
41
41
|
declare function MsTeamsLinkUser(): react_jsx_runtime.JSX.Element;
|
|
42
42
|
declare function TelegramConnectButton(): react_jsx_runtime.JSX.Element;
|
|
43
43
|
declare function useNovu(): null;
|
|
44
|
-
declare function
|
|
44
|
+
declare function useWebChat(_: UseWebChatProps): UseWebChatResult;
|
|
45
45
|
declare function useCounts(_: UseCountsProps): UseCountsResult;
|
|
46
46
|
declare function useNotifications(_: UseNotificationsProps): UseNotificationsResult;
|
|
47
47
|
declare function usePreferences(_: UsePreferencesProps): UsePreferencesResult;
|
|
@@ -52,4 +52,4 @@ declare function useUpdateSubscription(_?: UseUpdateSubscriptionProps): UseUpdat
|
|
|
52
52
|
declare function useRemoveSubscription(_?: UseRemoveSubscriptionProps): UseRemoveSubscriptionResult;
|
|
53
53
|
declare function useSubscriptions(_: UseSubscriptionsProps): UseSubscriptionsResult;
|
|
54
54
|
|
|
55
|
-
export { Bell, Inbox, InboxContent, InboxProps, MsTeamsConnectButton, MsTeamsLinkUser, Notifications, NovuProvider, NovuProviderProps, Preferences, SlackConnectButton, SlackLinkUser, Subscription, SubscriptionButton, SubscriptionPreferences, TelegramConnectButton,
|
|
55
|
+
export { Bell, Inbox, InboxContent, InboxProps, MsTeamsConnectButton, MsTeamsLinkUser, Notifications, NovuProvider, NovuProviderProps, Preferences, SlackConnectButton, SlackLinkUser, Subscription, SubscriptionButton, SubscriptionPreferences, TelegramConnectButton, UseCountsProps, UseCountsResult, UseNotificationsProps, UseNotificationsResult, UseScheduleProps as UsePreferencesProps, UsePreferencesResult, UseWebChatProps, UseWebChatResult, useCounts, useCreateSubscription, useNotifications, useNovu, usePreferences, useRemoveSubscription, useSchedule, useSubscription, useSubscriptions, useUpdateSubscription, useWebChat };
|
package/dist/esm/server/index.js
CHANGED
|
@@ -41,13 +41,27 @@ function TelegramConnectButton() {
|
|
|
41
41
|
function useNovu() {
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
|
-
function
|
|
44
|
+
function useWebChat(_) {
|
|
45
45
|
return {
|
|
46
46
|
messages: [],
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
pendingActions: [],
|
|
48
|
+
isLoading: true,
|
|
49
|
+
isRunning: false,
|
|
50
|
+
typing: void 0,
|
|
51
|
+
conversationStatus: "active",
|
|
52
|
+
run: { isRunning: false },
|
|
53
|
+
pagination: {
|
|
54
|
+
status: "idle",
|
|
55
|
+
hasMore: false,
|
|
56
|
+
fetchMore: () => Promise.resolve({ data: void 0, error: void 0 })
|
|
57
|
+
},
|
|
58
|
+
isRecovering: false,
|
|
59
|
+
catchUpError: void 0,
|
|
49
60
|
refetch: () => Promise.resolve(),
|
|
50
|
-
sendMessage: () => Promise.resolve({ data: void 0, error: void 0 })
|
|
61
|
+
sendMessage: () => Promise.resolve({ data: void 0, error: void 0 }),
|
|
62
|
+
respondToAction: () => Promise.resolve({ data: void 0, error: void 0 }),
|
|
63
|
+
sendAction: () => Promise.resolve({ data: void 0, error: void 0 }),
|
|
64
|
+
retryMessage: () => Promise.resolve({ data: void 0, error: void 0 })
|
|
51
65
|
};
|
|
52
66
|
}
|
|
53
67
|
function useCounts(_) {
|
|
@@ -137,7 +151,6 @@ export {
|
|
|
137
151
|
SubscriptionPreferences,
|
|
138
152
|
TelegramConnectButton,
|
|
139
153
|
WorkflowCriticalityEnum,
|
|
140
|
-
useAgentChat,
|
|
141
154
|
useCounts,
|
|
142
155
|
useCreateSubscription,
|
|
143
156
|
useNotifications,
|
|
@@ -147,6 +160,7 @@ export {
|
|
|
147
160
|
useSchedule,
|
|
148
161
|
useSubscription,
|
|
149
162
|
useSubscriptions,
|
|
150
|
-
useUpdateSubscription
|
|
163
|
+
useUpdateSubscription,
|
|
164
|
+
useWebChat
|
|
151
165
|
};
|
|
152
166
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/index.tsx"],"sourcesContent":["import type { InboxProps } from '../components/Inbox';\nimport { ShadowRootDetector } from '../components/ShadowRootDetector';\nimport type {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/server/index.tsx"],"sourcesContent":["import type { InboxProps } from '../components/Inbox';\nimport { ShadowRootDetector } from '../components/ShadowRootDetector';\nimport type {\n UseWebChatProps,\n UseWebChatResult,\n UseCreateSubscriptionProps,\n UseCreateSubscriptionResult,\n UseNotificationsProps,\n UseNotificationsResult,\n UsePreferencesProps,\n UsePreferencesResult,\n UseRemoveSubscriptionProps,\n UseRemoveSubscriptionResult,\n UseScheduleProps,\n UseScheduleResult,\n UseSubscriptionProps,\n UseSubscriptionResult,\n UseSubscriptionsProps,\n UseSubscriptionsResult,\n UseUpdateSubscriptionProps,\n UseUpdateSubscriptionResult,\n} from '../hooks';\nimport type { NovuProviderProps } from '../hooks/NovuProvider';\nimport type { UseCountsProps, UseCountsResult } from '../hooks/useCounts';\n\n/**\n * Exporting all components from the components folder\n * as empty functions to fix build errors in SSR\n * This will be replaced with actual components\n * when we implement the SSR components in @novu/js/ui\n */\nexport function Inbox(props: InboxProps) {\n return <ShadowRootDetector />;\n}\n\nexport function InboxContent() {}\n\nexport function Notifications() {}\n\nexport function Preferences() {}\n\nexport function Bell() {}\n\nexport function NovuProvider(props: NovuProviderProps) {\n return <>{props.children}</>;\n}\n\nexport function Subscription() {\n return <ShadowRootDetector />;\n}\n\nexport function SubscriptionButton() {}\n\nexport function SubscriptionPreferences() {}\n\nexport function SlackConnectButton() {\n return <ShadowRootDetector />;\n}\n\nexport function SlackLinkUser() {\n return <ShadowRootDetector />;\n}\n\nexport function MsTeamsConnectButton() {\n return <ShadowRootDetector />;\n}\n\nexport function MsTeamsLinkUser() {\n return <ShadowRootDetector />;\n}\n\nexport function TelegramConnectButton() {\n return <ShadowRootDetector />;\n}\n\nexport function useNovu() {\n return null;\n}\n\nexport function useWebChat(_: UseWebChatProps): UseWebChatResult {\n return {\n messages: [],\n pendingActions: [],\n isLoading: true,\n isRunning: false,\n typing: undefined,\n conversationStatus: 'active',\n run: { isRunning: false },\n pagination: {\n status: 'idle',\n hasMore: false,\n fetchMore: () => Promise.resolve({ data: undefined, error: undefined }),\n },\n isRecovering: false,\n catchUpError: undefined,\n refetch: () => Promise.resolve(),\n sendMessage: () => Promise.resolve({ data: undefined, error: undefined }),\n respondToAction: () => Promise.resolve({ data: undefined, error: undefined }),\n sendAction: () => Promise.resolve({ data: undefined, error: undefined }),\n retryMessage: () => Promise.resolve({ data: undefined, error: undefined }),\n };\n}\n\nexport function useCounts(_: UseCountsProps): UseCountsResult {\n return {\n isLoading: false,\n isFetching: false,\n refetch: () => Promise.resolve(),\n };\n}\n\nexport function useNotifications(_: UseNotificationsProps): UseNotificationsResult {\n return {\n isLoading: false,\n isFetching: false,\n hasMore: false,\n readAll: () => Promise.resolve({ data: undefined, error: undefined }),\n seenAll: () => Promise.resolve({ data: undefined, error: undefined }),\n archiveAll: () => Promise.resolve({ data: undefined, error: undefined }),\n archiveAllRead: () => Promise.resolve({ data: undefined, error: undefined }),\n refetch: () => Promise.resolve(),\n fetchMore: () => Promise.resolve(),\n };\n}\n\nexport function usePreferences(_: UsePreferencesProps): UsePreferencesResult {\n return {\n isLoading: false,\n isFetching: false,\n refetch: () => Promise.resolve(),\n };\n}\n\nexport function useSchedule(_: UseScheduleProps): UseScheduleResult {\n return {\n isLoading: false,\n isFetching: false,\n refetch: () => Promise.resolve(),\n };\n}\n\nexport function useSubscription(_: UseSubscriptionProps): UseSubscriptionResult {\n return {\n isLoading: false,\n isFetching: false,\n refetch: () => Promise.resolve(),\n };\n}\n\nexport function useCreateSubscription(_: UseCreateSubscriptionProps = {}): UseCreateSubscriptionResult {\n return {\n isCreating: false,\n error: undefined,\n create: () => Promise.resolve({ data: undefined, error: undefined }),\n };\n}\n\nexport function useUpdateSubscription(_: UseUpdateSubscriptionProps = {}): UseUpdateSubscriptionResult {\n return {\n isUpdating: false,\n error: undefined,\n update: () => Promise.resolve({ data: undefined, error: undefined }),\n };\n}\n\nexport function useRemoveSubscription(_: UseRemoveSubscriptionProps = {}): UseRemoveSubscriptionResult {\n return {\n isRemoving: false,\n error: undefined,\n remove: () => Promise.resolve({ data: undefined, error: undefined }),\n };\n}\n\nexport function useSubscriptions(_: UseSubscriptionsProps): UseSubscriptionsResult {\n return {\n isLoading: false,\n isFetching: false,\n refetch: () => Promise.resolve(),\n };\n}\n\nexport type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\n\nexport type {\n AllLocalization,\n AllLocalizationKey,\n ElementStyles,\n InboxAppearance,\n InboxAppearanceCallback,\n InboxAppearanceCallbackFunction,\n InboxAppearanceCallbackKeys,\n InboxAppearanceKey,\n InboxElements,\n InboxLocalization,\n InboxLocalizationKey,\n InboxTheme,\n NotificationActionClickHandler,\n NotificationClickHandler,\n NotificationRenderer,\n PreferenceGroups,\n PreferencesFilter,\n RouterPush,\n SubscriptionAppearance,\n SubscriptionAppearanceCallback,\n SubscriptionAppearanceCallbackFunction,\n SubscriptionAppearanceCallbackKeys,\n SubscriptionAppearanceKey,\n SubscriptionElements,\n SubscriptionLocalization,\n SubscriptionLocalizationKey,\n SubscriptionTheme,\n Tab,\n Variables,\n} from '@novu/js/ui';\n\nexport type { BellProps, InboxContentProps, InboxProps, NotificationProps, NovuProviderProps } from '../components';\n\nexport type {\n UseWebChatProps,\n UseWebChatResult,\n UseCountsProps,\n UseCountsResult,\n UseNotificationsProps,\n UseNotificationsResult,\n UsePreferencesResult,\n UseScheduleProps as UsePreferencesProps,\n} from '../hooks';\n\nexport type {\n BaseProps,\n BellRenderer,\n BodyRenderer,\n DefaultInboxProps,\n DefaultProps,\n NoRendererProps,\n NotificationRendererProps,\n NotificationsRenderer,\n SubjectBodyRendererProps,\n SubjectRenderer,\n WithChildrenProps,\n} from '../utils/types';\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@novu/react",
|
|
3
|
-
"version": "3.19.
|
|
3
|
+
"version": "3.19.1-rc.56a8a168f8",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/novuhq/novu",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
123
|
"dependencies": {
|
|
124
|
-
"@novu/js": "3.19.
|
|
124
|
+
"@novu/js": "3.19.1-rc.56a8a168f8"
|
|
125
125
|
},
|
|
126
126
|
"nx": {
|
|
127
127
|
"tags": [
|
|
@@ -130,7 +130,8 @@
|
|
|
130
130
|
},
|
|
131
131
|
"scripts": {
|
|
132
132
|
"build:watch": "tsup --watch",
|
|
133
|
-
"build": "tsup && pnpm run check-exports",
|
|
133
|
+
"build": "tsup && node scripts/bundle-graph.mjs && pnpm run check-exports",
|
|
134
|
+
"test:bundle-graph": "node ./scripts/bundle-graph.mjs",
|
|
134
135
|
"check-exports": "attw --pack .",
|
|
135
136
|
"check": "biome check .",
|
|
136
137
|
"check:fix": "biome check --write .",
|
|
@@ -1,176 +0,0 @@
|
|
|
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/useAgentChat.ts
|
|
21
|
-
var useAgentChat_exports = {};
|
|
22
|
-
__export(useAgentChat_exports, {
|
|
23
|
-
useAgentChat: () => useAgentChat
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(useAgentChat_exports);
|
|
26
|
-
var import_react = require("react");
|
|
27
|
-
var import_useDataRef = require("./internal/useDataRef.cjs");
|
|
28
|
-
var import_NovuProvider = require("./NovuProvider.cjs");
|
|
29
|
-
function createLocalSessionKey() {
|
|
30
|
-
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
31
|
-
return `local_${crypto.randomUUID().replace(/-/g, "").slice(0, 12)}`;
|
|
32
|
-
}
|
|
33
|
-
if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
|
|
34
|
-
const bytes = new Uint8Array(6);
|
|
35
|
-
crypto.getRandomValues(bytes);
|
|
36
|
-
return `local_${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
|
|
37
|
-
}
|
|
38
|
-
return `local_${Date.now().toString(36)}`;
|
|
39
|
-
}
|
|
40
|
-
var useAgentChat = (props) => {
|
|
41
|
-
const { agentId, conversationId: conversationIdProp } = props;
|
|
42
|
-
const propsRef = (0, import_useDataRef.useDataRef)(props);
|
|
43
|
-
const novu = (0, import_NovuProvider.useNovu)();
|
|
44
|
-
const [localSessionKey, setLocalSessionKey] = (0, import_react.useState)(createLocalSessionKey);
|
|
45
|
-
const sessionKey = conversationIdProp ?? localSessionKey;
|
|
46
|
-
const sessionKeyRef = (0, import_useDataRef.useDataRef)(sessionKey);
|
|
47
|
-
const prevAgentIdRef = (0, import_react.useRef)(agentId);
|
|
48
|
-
const prevConversationIdPropRef = (0, import_react.useRef)(conversationIdProp);
|
|
49
|
-
const [assignedConversationId, setAssignedConversationId] = (0, import_react.useState)();
|
|
50
|
-
const conversationId = conversationIdProp ?? assignedConversationId;
|
|
51
|
-
const conversationIdRef = (0, import_useDataRef.useDataRef)(conversationId);
|
|
52
|
-
const [messages, setMessages] = (0, import_react.useState)([]);
|
|
53
|
-
const [error, setError] = (0, import_react.useState)();
|
|
54
|
-
const [isLoading, setIsLoading] = (0, import_react.useState)(Boolean(conversationIdProp));
|
|
55
|
-
const [isFetching, setIsFetching] = (0, import_react.useState)(false);
|
|
56
|
-
const fetchGenerationRef = (0, import_react.useRef)(0);
|
|
57
|
-
(0, import_react.useEffect)(() => {
|
|
58
|
-
const agentChanged = prevAgentIdRef.current !== agentId;
|
|
59
|
-
const prevConversationIdProp = prevConversationIdPropRef.current;
|
|
60
|
-
prevAgentIdRef.current = agentId;
|
|
61
|
-
prevConversationIdPropRef.current = conversationIdProp;
|
|
62
|
-
if (agentChanged) {
|
|
63
|
-
setAssignedConversationId(void 0);
|
|
64
|
-
setLocalSessionKey(createLocalSessionKey());
|
|
65
|
-
setMessages([]);
|
|
66
|
-
setError(void 0);
|
|
67
|
-
setIsLoading(Boolean(conversationIdProp));
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (conversationIdProp) {
|
|
71
|
-
setAssignedConversationId(void 0);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
setIsLoading(false);
|
|
75
|
-
if (prevConversationIdProp !== void 0) {
|
|
76
|
-
setAssignedConversationId(void 0);
|
|
77
|
-
setLocalSessionKey(createLocalSessionKey());
|
|
78
|
-
setMessages([]);
|
|
79
|
-
}
|
|
80
|
-
}, [agentId, conversationIdProp]);
|
|
81
|
-
const fetchConversation = (0, import_react.useCallback)(
|
|
82
|
-
async (targetConversationId) => {
|
|
83
|
-
var _a, _b, _c, _d;
|
|
84
|
-
const generation = ++fetchGenerationRef.current;
|
|
85
|
-
setError(void 0);
|
|
86
|
-
setIsLoading(true);
|
|
87
|
-
setIsFetching(true);
|
|
88
|
-
const response = await novu.agentChat.loadConversation({
|
|
89
|
-
agentId,
|
|
90
|
-
conversationId: targetConversationId
|
|
91
|
-
});
|
|
92
|
-
if (generation !== fetchGenerationRef.current) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (response.error) {
|
|
96
|
-
setError(response.error);
|
|
97
|
-
(_b = (_a = propsRef.current).onError) == null ? void 0 : _b.call(_a, response.error);
|
|
98
|
-
} else if (response.data) {
|
|
99
|
-
setMessages(response.data.messages);
|
|
100
|
-
(_d = (_c = propsRef.current).onSuccess) == null ? void 0 : _d.call(_c, response.data);
|
|
101
|
-
}
|
|
102
|
-
setIsLoading(false);
|
|
103
|
-
setIsFetching(false);
|
|
104
|
-
},
|
|
105
|
-
[novu, agentId, propsRef]
|
|
106
|
-
);
|
|
107
|
-
(0, import_react.useEffect)(() => {
|
|
108
|
-
const snapshot = novu.agentChat.getConversation({
|
|
109
|
-
agentId,
|
|
110
|
-
key: sessionKey,
|
|
111
|
-
conversationId: conversationIdProp
|
|
112
|
-
});
|
|
113
|
-
if (snapshot) {
|
|
114
|
-
setMessages(snapshot.messages);
|
|
115
|
-
if (snapshot.conversationId && !conversationIdProp) {
|
|
116
|
-
setAssignedConversationId(snapshot.conversationId);
|
|
117
|
-
}
|
|
118
|
-
} else if (!conversationIdProp) {
|
|
119
|
-
setMessages([]);
|
|
120
|
-
}
|
|
121
|
-
const cleanup = novu.on("agent_chat.messages.updated", ({ data }) => {
|
|
122
|
-
if (data.key !== sessionKeyRef.current) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
setMessages(data.messages);
|
|
126
|
-
if (data.conversationId && !propsRef.current.conversationId) {
|
|
127
|
-
setAssignedConversationId(data.conversationId);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
if (conversationIdProp) {
|
|
131
|
-
void fetchConversation(conversationIdProp);
|
|
132
|
-
}
|
|
133
|
-
return cleanup;
|
|
134
|
-
}, [novu, agentId, conversationIdProp, sessionKey, sessionKeyRef, conversationIdRef, propsRef, fetchConversation]);
|
|
135
|
-
const refetch = (0, import_react.useCallback)(async () => {
|
|
136
|
-
const id = conversationIdRef.current;
|
|
137
|
-
if (!id) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
await fetchConversation(id);
|
|
141
|
-
}, [conversationIdRef, fetchConversation]);
|
|
142
|
-
const sendMessage = (0, import_react.useCallback)(
|
|
143
|
-
async (text) => {
|
|
144
|
-
var _a, _b;
|
|
145
|
-
setError(void 0);
|
|
146
|
-
const response = await novu.agentChat.sendMessage({
|
|
147
|
-
agentId,
|
|
148
|
-
text,
|
|
149
|
-
key: sessionKeyRef.current,
|
|
150
|
-
conversationId: conversationIdRef.current
|
|
151
|
-
});
|
|
152
|
-
if (response.error) {
|
|
153
|
-
setError(response.error);
|
|
154
|
-
(_b = (_a = propsRef.current).onError) == null ? void 0 : _b.call(_a, response.error);
|
|
155
|
-
} else if (response.data && !propsRef.current.conversationId) {
|
|
156
|
-
setAssignedConversationId(response.data.conversationId);
|
|
157
|
-
}
|
|
158
|
-
return response;
|
|
159
|
-
},
|
|
160
|
-
[novu, agentId, sessionKeyRef, conversationIdRef, propsRef]
|
|
161
|
-
);
|
|
162
|
-
return {
|
|
163
|
-
messages,
|
|
164
|
-
sendMessage,
|
|
165
|
-
conversationId,
|
|
166
|
-
error,
|
|
167
|
-
isLoading,
|
|
168
|
-
isFetching,
|
|
169
|
-
refetch
|
|
170
|
-
};
|
|
171
|
-
};
|
|
172
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
173
|
-
0 && (module.exports = {
|
|
174
|
-
useAgentChat
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=useAgentChat.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useAgentChat.ts"],"sourcesContent":["import type { AgentMessage, LoadConversationResult, NovuError, SendMessageResult } from '@novu/js';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDataRef } from './internal/useDataRef';\nimport { useNovu } from './NovuProvider';\n\nexport type UseAgentChatProps = {\n agentId: string;\n /**\n * Resume this conversation. The hook loads history on mount.\n * Omit this prop to start a new chat. The first send creates a conversation.\n * Later sends pass the returned id. Remount or clear this prop to start another chat.\n */\n conversationId?: string;\n onSuccess?: (data: LoadConversationResult) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseAgentChatResult = {\n messages: AgentMessage[];\n conversationId?: string;\n error?: NovuError;\n /** True until the first history fetch completes. False when there is no `conversationId` prop. */\n isLoading: boolean;\n isFetching: boolean;\n refetch: () => Promise<void>;\n sendMessage: (text: string) => Promise<{\n data?: SendMessageResult;\n error?: NovuError;\n }>;\n};\n\nfunction createLocalSessionKey(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `local_${crypto.randomUUID().replace(/-/g, '').slice(0, 12)}`;\n }\n\n if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n const bytes = new Uint8Array(6);\n crypto.getRandomValues(bytes);\n\n return `local_${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n }\n\n return `local_${Date.now().toString(36)}`;\n}\n\nexport const useAgentChat = (props: UseAgentChatProps): UseAgentChatResult => {\n const { agentId, conversationId: conversationIdProp } = props;\n const propsRef = useDataRef(props);\n const novu = useNovu();\n\n // Resume: the prop is the key on the same render (no effect lag).\n // Create: keep a `local_*` key until remount, prop clear, or agent change.\n const [localSessionKey, setLocalSessionKey] = useState(createLocalSessionKey);\n const sessionKey = conversationIdProp ?? localSessionKey;\n const sessionKeyRef = useDataRef(sessionKey);\n const prevAgentIdRef = useRef(agentId);\n const prevConversationIdPropRef = useRef(conversationIdProp);\n\n const [assignedConversationId, setAssignedConversationId] = useState<string>();\n const conversationId = conversationIdProp ?? assignedConversationId;\n const conversationIdRef = useDataRef(conversationId);\n\n const [messages, setMessages] = useState<AgentMessage[]>([]);\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(Boolean(conversationIdProp));\n const [isFetching, setIsFetching] = useState(false);\n const fetchGenerationRef = useRef(0);\n\n useEffect(() => {\n const agentChanged = prevAgentIdRef.current !== agentId;\n const prevConversationIdProp = prevConversationIdPropRef.current;\n prevAgentIdRef.current = agentId;\n prevConversationIdPropRef.current = conversationIdProp;\n\n if (agentChanged) {\n setAssignedConversationId(undefined);\n setLocalSessionKey(createLocalSessionKey());\n setMessages([]);\n setError(undefined);\n setIsLoading(Boolean(conversationIdProp));\n\n return;\n }\n\n if (conversationIdProp) {\n setAssignedConversationId(undefined);\n\n return;\n }\n\n setIsLoading(false);\n if (prevConversationIdProp !== undefined) {\n setAssignedConversationId(undefined);\n setLocalSessionKey(createLocalSessionKey());\n setMessages([]);\n }\n }, [agentId, conversationIdProp]);\n\n const fetchConversation = useCallback(\n async (targetConversationId: string) => {\n const generation = ++fetchGenerationRef.current;\n setError(undefined);\n setIsLoading(true);\n setIsFetching(true);\n\n const response = await novu.agentChat.loadConversation({\n agentId,\n conversationId: targetConversationId,\n });\n\n if (generation !== fetchGenerationRef.current) {\n return;\n }\n\n if (response.error) {\n setError(response.error);\n propsRef.current.onError?.(response.error);\n } else if (response.data) {\n setMessages(response.data.messages);\n propsRef.current.onSuccess?.(response.data);\n }\n\n setIsLoading(false);\n setIsFetching(false);\n },\n [novu, agentId, propsRef]\n );\n\n useEffect(() => {\n const snapshot = novu.agentChat.getConversation({\n agentId,\n key: sessionKey,\n conversationId: conversationIdProp,\n });\n if (snapshot) {\n setMessages(snapshot.messages);\n if (snapshot.conversationId && !conversationIdProp) {\n setAssignedConversationId(snapshot.conversationId);\n }\n } else if (!conversationIdProp) {\n setMessages([]);\n }\n\n const cleanup = novu.on('agent_chat.messages.updated', ({ data }) => {\n if (data.key !== sessionKeyRef.current) {\n return;\n }\n\n setMessages(data.messages);\n if (data.conversationId && !propsRef.current.conversationId) {\n setAssignedConversationId(data.conversationId);\n }\n });\n\n if (conversationIdProp) {\n void fetchConversation(conversationIdProp);\n }\n\n return cleanup;\n }, [novu, agentId, conversationIdProp, sessionKey, sessionKeyRef, conversationIdRef, propsRef, fetchConversation]);\n\n const refetch = useCallback(async () => {\n const id = conversationIdRef.current;\n if (!id) {\n return;\n }\n\n await fetchConversation(id);\n }, [conversationIdRef, fetchConversation]);\n\n const sendMessage = useCallback(\n async (text: string) => {\n setError(undefined);\n\n const response = await novu.agentChat.sendMessage({\n agentId,\n text,\n key: sessionKeyRef.current,\n conversationId: conversationIdRef.current,\n });\n\n if (response.error) {\n setError(response.error);\n propsRef.current.onError?.(response.error);\n } else if (response.data && !propsRef.current.conversationId) {\n setAssignedConversationId(response.data.conversationId);\n }\n\n return response;\n },\n [novu, agentId, sessionKeyRef, conversationIdRef, propsRef]\n );\n\n return {\n messages,\n sendMessage,\n conversationId,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { LoadConversationResult, NovuError, AgentMessage, SendMessageResult } from '@novu/js';
|
|
2
|
-
|
|
3
|
-
type UseAgentChatProps = {
|
|
4
|
-
agentId: string;
|
|
5
|
-
/**
|
|
6
|
-
* Resume this conversation. The hook loads history on mount.
|
|
7
|
-
* Omit this prop to start a new chat. The first send creates a conversation.
|
|
8
|
-
* Later sends pass the returned id. Remount or clear this prop to start another chat.
|
|
9
|
-
*/
|
|
10
|
-
conversationId?: string;
|
|
11
|
-
onSuccess?: (data: LoadConversationResult) => void;
|
|
12
|
-
onError?: (error: NovuError) => void;
|
|
13
|
-
};
|
|
14
|
-
type UseAgentChatResult = {
|
|
15
|
-
messages: AgentMessage[];
|
|
16
|
-
conversationId?: string;
|
|
17
|
-
error?: NovuError;
|
|
18
|
-
/** True until the first history fetch completes. False when there is no `conversationId` prop. */
|
|
19
|
-
isLoading: boolean;
|
|
20
|
-
isFetching: boolean;
|
|
21
|
-
refetch: () => Promise<void>;
|
|
22
|
-
sendMessage: (text: string) => Promise<{
|
|
23
|
-
data?: SendMessageResult;
|
|
24
|
-
error?: NovuError;
|
|
25
|
-
}>;
|
|
26
|
-
};
|
|
27
|
-
declare const useAgentChat: (props: UseAgentChatProps) => UseAgentChatResult;
|
|
28
|
-
|
|
29
|
-
export { type UseAgentChatProps, type UseAgentChatResult, useAgentChat };
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { LoadConversationResult, NovuError, AgentMessage, SendMessageResult } from '@novu/js';
|
|
2
|
-
|
|
3
|
-
type UseAgentChatProps = {
|
|
4
|
-
agentId: string;
|
|
5
|
-
/**
|
|
6
|
-
* Resume this conversation. The hook loads history on mount.
|
|
7
|
-
* Omit this prop to start a new chat. The first send creates a conversation.
|
|
8
|
-
* Later sends pass the returned id. Remount or clear this prop to start another chat.
|
|
9
|
-
*/
|
|
10
|
-
conversationId?: string;
|
|
11
|
-
onSuccess?: (data: LoadConversationResult) => void;
|
|
12
|
-
onError?: (error: NovuError) => void;
|
|
13
|
-
};
|
|
14
|
-
type UseAgentChatResult = {
|
|
15
|
-
messages: AgentMessage[];
|
|
16
|
-
conversationId?: string;
|
|
17
|
-
error?: NovuError;
|
|
18
|
-
/** True until the first history fetch completes. False when there is no `conversationId` prop. */
|
|
19
|
-
isLoading: boolean;
|
|
20
|
-
isFetching: boolean;
|
|
21
|
-
refetch: () => Promise<void>;
|
|
22
|
-
sendMessage: (text: string) => Promise<{
|
|
23
|
-
data?: SendMessageResult;
|
|
24
|
-
error?: NovuError;
|
|
25
|
-
}>;
|
|
26
|
-
};
|
|
27
|
-
declare const useAgentChat: (props: UseAgentChatProps) => UseAgentChatResult;
|
|
28
|
-
|
|
29
|
-
export { type UseAgentChatProps, type UseAgentChatResult, useAgentChat };
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
// src/hooks/useAgentChat.ts
|
|
2
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
-
import { useDataRef } from "./internal/useDataRef.js";
|
|
4
|
-
import { useNovu } from "./NovuProvider.js";
|
|
5
|
-
function createLocalSessionKey() {
|
|
6
|
-
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
7
|
-
return `local_${crypto.randomUUID().replace(/-/g, "").slice(0, 12)}`;
|
|
8
|
-
}
|
|
9
|
-
if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
|
|
10
|
-
const bytes = new Uint8Array(6);
|
|
11
|
-
crypto.getRandomValues(bytes);
|
|
12
|
-
return `local_${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
|
|
13
|
-
}
|
|
14
|
-
return `local_${Date.now().toString(36)}`;
|
|
15
|
-
}
|
|
16
|
-
var useAgentChat = (props) => {
|
|
17
|
-
const { agentId, conversationId: conversationIdProp } = props;
|
|
18
|
-
const propsRef = useDataRef(props);
|
|
19
|
-
const novu = useNovu();
|
|
20
|
-
const [localSessionKey, setLocalSessionKey] = useState(createLocalSessionKey);
|
|
21
|
-
const sessionKey = conversationIdProp ?? localSessionKey;
|
|
22
|
-
const sessionKeyRef = useDataRef(sessionKey);
|
|
23
|
-
const prevAgentIdRef = useRef(agentId);
|
|
24
|
-
const prevConversationIdPropRef = useRef(conversationIdProp);
|
|
25
|
-
const [assignedConversationId, setAssignedConversationId] = useState();
|
|
26
|
-
const conversationId = conversationIdProp ?? assignedConversationId;
|
|
27
|
-
const conversationIdRef = useDataRef(conversationId);
|
|
28
|
-
const [messages, setMessages] = useState([]);
|
|
29
|
-
const [error, setError] = useState();
|
|
30
|
-
const [isLoading, setIsLoading] = useState(Boolean(conversationIdProp));
|
|
31
|
-
const [isFetching, setIsFetching] = useState(false);
|
|
32
|
-
const fetchGenerationRef = useRef(0);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
const agentChanged = prevAgentIdRef.current !== agentId;
|
|
35
|
-
const prevConversationIdProp = prevConversationIdPropRef.current;
|
|
36
|
-
prevAgentIdRef.current = agentId;
|
|
37
|
-
prevConversationIdPropRef.current = conversationIdProp;
|
|
38
|
-
if (agentChanged) {
|
|
39
|
-
setAssignedConversationId(void 0);
|
|
40
|
-
setLocalSessionKey(createLocalSessionKey());
|
|
41
|
-
setMessages([]);
|
|
42
|
-
setError(void 0);
|
|
43
|
-
setIsLoading(Boolean(conversationIdProp));
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (conversationIdProp) {
|
|
47
|
-
setAssignedConversationId(void 0);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
setIsLoading(false);
|
|
51
|
-
if (prevConversationIdProp !== void 0) {
|
|
52
|
-
setAssignedConversationId(void 0);
|
|
53
|
-
setLocalSessionKey(createLocalSessionKey());
|
|
54
|
-
setMessages([]);
|
|
55
|
-
}
|
|
56
|
-
}, [agentId, conversationIdProp]);
|
|
57
|
-
const fetchConversation = useCallback(
|
|
58
|
-
async (targetConversationId) => {
|
|
59
|
-
const generation = ++fetchGenerationRef.current;
|
|
60
|
-
setError(void 0);
|
|
61
|
-
setIsLoading(true);
|
|
62
|
-
setIsFetching(true);
|
|
63
|
-
const response = await novu.agentChat.loadConversation({
|
|
64
|
-
agentId,
|
|
65
|
-
conversationId: targetConversationId
|
|
66
|
-
});
|
|
67
|
-
if (generation !== fetchGenerationRef.current) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (response.error) {
|
|
71
|
-
setError(response.error);
|
|
72
|
-
propsRef.current.onError?.(response.error);
|
|
73
|
-
} else if (response.data) {
|
|
74
|
-
setMessages(response.data.messages);
|
|
75
|
-
propsRef.current.onSuccess?.(response.data);
|
|
76
|
-
}
|
|
77
|
-
setIsLoading(false);
|
|
78
|
-
setIsFetching(false);
|
|
79
|
-
},
|
|
80
|
-
[novu, agentId, propsRef]
|
|
81
|
-
);
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
const snapshot = novu.agentChat.getConversation({
|
|
84
|
-
agentId,
|
|
85
|
-
key: sessionKey,
|
|
86
|
-
conversationId: conversationIdProp
|
|
87
|
-
});
|
|
88
|
-
if (snapshot) {
|
|
89
|
-
setMessages(snapshot.messages);
|
|
90
|
-
if (snapshot.conversationId && !conversationIdProp) {
|
|
91
|
-
setAssignedConversationId(snapshot.conversationId);
|
|
92
|
-
}
|
|
93
|
-
} else if (!conversationIdProp) {
|
|
94
|
-
setMessages([]);
|
|
95
|
-
}
|
|
96
|
-
const cleanup = novu.on("agent_chat.messages.updated", ({ data }) => {
|
|
97
|
-
if (data.key !== sessionKeyRef.current) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
setMessages(data.messages);
|
|
101
|
-
if (data.conversationId && !propsRef.current.conversationId) {
|
|
102
|
-
setAssignedConversationId(data.conversationId);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
if (conversationIdProp) {
|
|
106
|
-
void fetchConversation(conversationIdProp);
|
|
107
|
-
}
|
|
108
|
-
return cleanup;
|
|
109
|
-
}, [novu, agentId, conversationIdProp, sessionKey, sessionKeyRef, conversationIdRef, propsRef, fetchConversation]);
|
|
110
|
-
const refetch = useCallback(async () => {
|
|
111
|
-
const id = conversationIdRef.current;
|
|
112
|
-
if (!id) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
await fetchConversation(id);
|
|
116
|
-
}, [conversationIdRef, fetchConversation]);
|
|
117
|
-
const sendMessage = useCallback(
|
|
118
|
-
async (text) => {
|
|
119
|
-
setError(void 0);
|
|
120
|
-
const response = await novu.agentChat.sendMessage({
|
|
121
|
-
agentId,
|
|
122
|
-
text,
|
|
123
|
-
key: sessionKeyRef.current,
|
|
124
|
-
conversationId: conversationIdRef.current
|
|
125
|
-
});
|
|
126
|
-
if (response.error) {
|
|
127
|
-
setError(response.error);
|
|
128
|
-
propsRef.current.onError?.(response.error);
|
|
129
|
-
} else if (response.data && !propsRef.current.conversationId) {
|
|
130
|
-
setAssignedConversationId(response.data.conversationId);
|
|
131
|
-
}
|
|
132
|
-
return response;
|
|
133
|
-
},
|
|
134
|
-
[novu, agentId, sessionKeyRef, conversationIdRef, propsRef]
|
|
135
|
-
);
|
|
136
|
-
return {
|
|
137
|
-
messages,
|
|
138
|
-
sendMessage,
|
|
139
|
-
conversationId,
|
|
140
|
-
error,
|
|
141
|
-
isLoading,
|
|
142
|
-
isFetching,
|
|
143
|
-
refetch
|
|
144
|
-
};
|
|
145
|
-
};
|
|
146
|
-
export {
|
|
147
|
-
useAgentChat
|
|
148
|
-
};
|
|
149
|
-
//# sourceMappingURL=useAgentChat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useAgentChat.ts"],"sourcesContent":["import type { AgentMessage, LoadConversationResult, NovuError, SendMessageResult } from '@novu/js';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDataRef } from './internal/useDataRef';\nimport { useNovu } from './NovuProvider';\n\nexport type UseAgentChatProps = {\n agentId: string;\n /**\n * Resume this conversation. The hook loads history on mount.\n * Omit this prop to start a new chat. The first send creates a conversation.\n * Later sends pass the returned id. Remount or clear this prop to start another chat.\n */\n conversationId?: string;\n onSuccess?: (data: LoadConversationResult) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseAgentChatResult = {\n messages: AgentMessage[];\n conversationId?: string;\n error?: NovuError;\n /** True until the first history fetch completes. False when there is no `conversationId` prop. */\n isLoading: boolean;\n isFetching: boolean;\n refetch: () => Promise<void>;\n sendMessage: (text: string) => Promise<{\n data?: SendMessageResult;\n error?: NovuError;\n }>;\n};\n\nfunction createLocalSessionKey(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `local_${crypto.randomUUID().replace(/-/g, '').slice(0, 12)}`;\n }\n\n if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n const bytes = new Uint8Array(6);\n crypto.getRandomValues(bytes);\n\n return `local_${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n }\n\n return `local_${Date.now().toString(36)}`;\n}\n\nexport const useAgentChat = (props: UseAgentChatProps): UseAgentChatResult => {\n const { agentId, conversationId: conversationIdProp } = props;\n const propsRef = useDataRef(props);\n const novu = useNovu();\n\n // Resume: the prop is the key on the same render (no effect lag).\n // Create: keep a `local_*` key until remount, prop clear, or agent change.\n const [localSessionKey, setLocalSessionKey] = useState(createLocalSessionKey);\n const sessionKey = conversationIdProp ?? localSessionKey;\n const sessionKeyRef = useDataRef(sessionKey);\n const prevAgentIdRef = useRef(agentId);\n const prevConversationIdPropRef = useRef(conversationIdProp);\n\n const [assignedConversationId, setAssignedConversationId] = useState<string>();\n const conversationId = conversationIdProp ?? assignedConversationId;\n const conversationIdRef = useDataRef(conversationId);\n\n const [messages, setMessages] = useState<AgentMessage[]>([]);\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(Boolean(conversationIdProp));\n const [isFetching, setIsFetching] = useState(false);\n const fetchGenerationRef = useRef(0);\n\n useEffect(() => {\n const agentChanged = prevAgentIdRef.current !== agentId;\n const prevConversationIdProp = prevConversationIdPropRef.current;\n prevAgentIdRef.current = agentId;\n prevConversationIdPropRef.current = conversationIdProp;\n\n if (agentChanged) {\n setAssignedConversationId(undefined);\n setLocalSessionKey(createLocalSessionKey());\n setMessages([]);\n setError(undefined);\n setIsLoading(Boolean(conversationIdProp));\n\n return;\n }\n\n if (conversationIdProp) {\n setAssignedConversationId(undefined);\n\n return;\n }\n\n setIsLoading(false);\n if (prevConversationIdProp !== undefined) {\n setAssignedConversationId(undefined);\n setLocalSessionKey(createLocalSessionKey());\n setMessages([]);\n }\n }, [agentId, conversationIdProp]);\n\n const fetchConversation = useCallback(\n async (targetConversationId: string) => {\n const generation = ++fetchGenerationRef.current;\n setError(undefined);\n setIsLoading(true);\n setIsFetching(true);\n\n const response = await novu.agentChat.loadConversation({\n agentId,\n conversationId: targetConversationId,\n });\n\n if (generation !== fetchGenerationRef.current) {\n return;\n }\n\n if (response.error) {\n setError(response.error);\n propsRef.current.onError?.(response.error);\n } else if (response.data) {\n setMessages(response.data.messages);\n propsRef.current.onSuccess?.(response.data);\n }\n\n setIsLoading(false);\n setIsFetching(false);\n },\n [novu, agentId, propsRef]\n );\n\n useEffect(() => {\n const snapshot = novu.agentChat.getConversation({\n agentId,\n key: sessionKey,\n conversationId: conversationIdProp,\n });\n if (snapshot) {\n setMessages(snapshot.messages);\n if (snapshot.conversationId && !conversationIdProp) {\n setAssignedConversationId(snapshot.conversationId);\n }\n } else if (!conversationIdProp) {\n setMessages([]);\n }\n\n const cleanup = novu.on('agent_chat.messages.updated', ({ data }) => {\n if (data.key !== sessionKeyRef.current) {\n return;\n }\n\n setMessages(data.messages);\n if (data.conversationId && !propsRef.current.conversationId) {\n setAssignedConversationId(data.conversationId);\n }\n });\n\n if (conversationIdProp) {\n void fetchConversation(conversationIdProp);\n }\n\n return cleanup;\n }, [novu, agentId, conversationIdProp, sessionKey, sessionKeyRef, conversationIdRef, propsRef, fetchConversation]);\n\n const refetch = useCallback(async () => {\n const id = conversationIdRef.current;\n if (!id) {\n return;\n }\n\n await fetchConversation(id);\n }, [conversationIdRef, fetchConversation]);\n\n const sendMessage = useCallback(\n async (text: string) => {\n setError(undefined);\n\n const response = await novu.agentChat.sendMessage({\n agentId,\n text,\n key: sessionKeyRef.current,\n conversationId: conversationIdRef.current,\n });\n\n if (response.error) {\n setError(response.error);\n propsRef.current.onError?.(response.error);\n } else if (response.data && !propsRef.current.conversationId) {\n setAssignedConversationId(response.data.conversationId);\n }\n\n return response;\n },\n [novu, agentId, sessionKeyRef, conversationIdRef, propsRef]\n );\n\n return {\n messages,\n sendMessage,\n conversationId,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":"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","names":[]}
|