@base44-preview/sdk 0.7.0-pr.26.ab75236 → 0.7.0-pr.27.2a9d388

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/client.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { AgentsModuleConfig } from "./modules/agents.js";
1
+ export type CreateClientOptions = {
2
+ onError?: (error: Error) => void;
3
+ };
2
4
  /**
3
5
  * Create a Base44 client instance
4
6
  * @param {Object} config - Client configuration
@@ -7,7 +9,6 @@ import { AgentsModuleConfig } from "./modules/agents.js";
7
9
  * @param {string} [config.token] - Authentication token
8
10
  * @param {string} [config.serviceToken] - Service role authentication token
9
11
  * @param {boolean} [config.requiresAuth=false] - Whether the app requires authentication
10
- * @param {AgentsModuleConfig} [config.agents] - Configuration for agents module
11
12
  * @returns {Object} Base44 client instance
12
13
  */
13
14
  export declare function createClient(config: {
@@ -16,7 +17,7 @@ export declare function createClient(config: {
16
17
  token?: string;
17
18
  serviceToken?: string;
18
19
  requiresAuth?: boolean;
19
- agents?: AgentsModuleConfig;
20
+ options?: CreateClientOptions;
20
21
  }): {
21
22
  /**
22
23
  * Set authentication token for all requests
@@ -42,19 +43,12 @@ export declare function createClient(config: {
42
43
  invoke(functionName: string, data: Record<string, any>): Promise<import("axios").AxiosResponse<any, any>>;
43
44
  };
44
45
  agents: {
45
- listConversations(filterParams?: import("./modules/agents.js").FilterParams): Promise<import("./modules/agents.js").AgentConversation[]>;
46
- getConversation(conversationId: string): Promise<import("./modules/agents.js").AgentConversation>;
47
- createConversation(payload: import("./modules/agents.js").CreateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
48
- updateConversation(conversationId: string, payload: import("./modules/agents.js").UpdateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
49
- sendMessage(conversationId: string, message: Omit<import("./modules/agents.js").Message, "id">): Promise<import("./modules/agents.js").Message>;
50
- deleteMessage(conversationId: string, messageId: string): Promise<void>;
51
- subscribeToConversation(conversationId: string, onUpdate: (conversation: import("./modules/agents.js").AgentConversation) => void): () => void;
52
- getWebSocketStatus(): {
53
- enabled: boolean;
54
- connected: boolean;
55
- };
56
- connectWebSocket(): Promise<void>;
57
- disconnectWebSocket(): void;
46
+ getConversations: () => Promise<import("./modules/agents.types.js").AgentConversation[]>;
47
+ getConversation: (conversationId: string) => Promise<import("./modules/agents.types.js").AgentConversation | undefined>;
48
+ listConversations: (filterParams: any) => Promise<import("./modules/agents.types.js").AgentConversation[]>;
49
+ createConversation: (conversation: any) => Promise<import("./modules/agents.types.js").AgentConversation>;
50
+ addMessage: (conversation: any, message: any) => Promise<import("./modules/agents.types.js").AgentMessage>;
51
+ subscribeToConversation: (conversationId: string, onUpdate: any) => () => void;
58
52
  };
59
53
  };
60
54
  entities: {};
@@ -75,19 +69,12 @@ export declare function createClient(config: {
75
69
  invoke(functionName: string, data: Record<string, any>): Promise<import("axios").AxiosResponse<any, any>>;
76
70
  };
77
71
  agents: {
78
- listConversations(filterParams?: import("./modules/agents.js").FilterParams): Promise<import("./modules/agents.js").AgentConversation[]>;
79
- getConversation(conversationId: string): Promise<import("./modules/agents.js").AgentConversation>;
80
- createConversation(payload: import("./modules/agents.js").CreateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
81
- updateConversation(conversationId: string, payload: import("./modules/agents.js").UpdateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
82
- sendMessage(conversationId: string, message: Omit<import("./modules/agents.js").Message, "id">): Promise<import("./modules/agents.js").Message>;
83
- deleteMessage(conversationId: string, messageId: string): Promise<void>;
84
- subscribeToConversation(conversationId: string, onUpdate: (conversation: import("./modules/agents.js").AgentConversation) => void): () => void;
85
- getWebSocketStatus(): {
86
- enabled: boolean;
87
- connected: boolean;
88
- };
89
- connectWebSocket(): Promise<void>;
90
- disconnectWebSocket(): void;
72
+ getConversations: () => Promise<import("./modules/agents.types.js").AgentConversation[]>;
73
+ getConversation: (conversationId: string) => Promise<import("./modules/agents.types.js").AgentConversation | undefined>;
74
+ listConversations: (filterParams: any) => Promise<import("./modules/agents.types.js").AgentConversation[]>;
75
+ createConversation: (conversation: any) => Promise<import("./modules/agents.types.js").AgentConversation>;
76
+ addMessage: (conversation: any, message: any) => Promise<import("./modules/agents.types.js").AgentMessage>;
77
+ subscribeToConversation: (conversationId: string, onUpdate: any) => () => void;
91
78
  };
92
79
  };
93
80
  export declare function createClientFromRequest(request: Request): {
@@ -115,19 +102,12 @@ export declare function createClientFromRequest(request: Request): {
115
102
  invoke(functionName: string, data: Record<string, any>): Promise<import("axios").AxiosResponse<any, any>>;
116
103
  };
117
104
  agents: {
118
- listConversations(filterParams?: import("./modules/agents.js").FilterParams): Promise<import("./modules/agents.js").AgentConversation[]>;
119
- getConversation(conversationId: string): Promise<import("./modules/agents.js").AgentConversation>;
120
- createConversation(payload: import("./modules/agents.js").CreateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
121
- updateConversation(conversationId: string, payload: import("./modules/agents.js").UpdateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
122
- sendMessage(conversationId: string, message: Omit<import("./modules/agents.js").Message, "id">): Promise<import("./modules/agents.js").Message>;
123
- deleteMessage(conversationId: string, messageId: string): Promise<void>;
124
- subscribeToConversation(conversationId: string, onUpdate: (conversation: import("./modules/agents.js").AgentConversation) => void): () => void;
125
- getWebSocketStatus(): {
126
- enabled: boolean;
127
- connected: boolean;
128
- };
129
- connectWebSocket(): Promise<void>;
130
- disconnectWebSocket(): void;
105
+ getConversations: () => Promise<import("./modules/agents.types.js").AgentConversation[]>;
106
+ getConversation: (conversationId: string) => Promise<import("./modules/agents.types.js").AgentConversation | undefined>;
107
+ listConversations: (filterParams: any) => Promise<import("./modules/agents.types.js").AgentConversation[]>;
108
+ createConversation: (conversation: any) => Promise<import("./modules/agents.types.js").AgentConversation>;
109
+ addMessage: (conversation: any, message: any) => Promise<import("./modules/agents.types.js").AgentMessage>;
110
+ subscribeToConversation: (conversationId: string, onUpdate: any) => () => void;
131
111
  };
132
112
  };
133
113
  entities: {};
@@ -148,18 +128,11 @@ export declare function createClientFromRequest(request: Request): {
148
128
  invoke(functionName: string, data: Record<string, any>): Promise<import("axios").AxiosResponse<any, any>>;
149
129
  };
150
130
  agents: {
151
- listConversations(filterParams?: import("./modules/agents.js").FilterParams): Promise<import("./modules/agents.js").AgentConversation[]>;
152
- getConversation(conversationId: string): Promise<import("./modules/agents.js").AgentConversation>;
153
- createConversation(payload: import("./modules/agents.js").CreateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
154
- updateConversation(conversationId: string, payload: import("./modules/agents.js").UpdateConversationPayload): Promise<import("./modules/agents.js").AgentConversation>;
155
- sendMessage(conversationId: string, message: Omit<import("./modules/agents.js").Message, "id">): Promise<import("./modules/agents.js").Message>;
156
- deleteMessage(conversationId: string, messageId: string): Promise<void>;
157
- subscribeToConversation(conversationId: string, onUpdate: (conversation: import("./modules/agents.js").AgentConversation) => void): () => void;
158
- getWebSocketStatus(): {
159
- enabled: boolean;
160
- connected: boolean;
161
- };
162
- connectWebSocket(): Promise<void>;
163
- disconnectWebSocket(): void;
131
+ getConversations: () => Promise<import("./modules/agents.types.js").AgentConversation[]>;
132
+ getConversation: (conversationId: string) => Promise<import("./modules/agents.types.js").AgentConversation | undefined>;
133
+ listConversations: (filterParams: any) => Promise<import("./modules/agents.types.js").AgentConversation[]>;
134
+ createConversation: (conversation: any) => Promise<import("./modules/agents.types.js").AgentConversation>;
135
+ addMessage: (conversation: any, message: any) => Promise<import("./modules/agents.types.js").AgentMessage>;
136
+ subscribeToConversation: (conversationId: string, onUpdate: any) => () => void;
164
137
  };
165
138
  };
package/dist/client.js CHANGED
@@ -6,6 +6,7 @@ import { createSsoModule } from "./modules/sso.js";
6
6
  import { getAccessToken } from "./utils/auth-utils.js";
7
7
  import { createFunctionsModule } from "./modules/functions.js";
8
8
  import { createAgentsModule } from "./modules/agents.js";
9
+ import { RoomsSocket } from "./utils/socket-utils.js";
9
10
  /**
10
11
  * Create a Base44 client instance
11
12
  * @param {Object} config - Client configuration
@@ -14,11 +15,20 @@ import { createAgentsModule } from "./modules/agents.js";
14
15
  * @param {string} [config.token] - Authentication token
15
16
  * @param {string} [config.serviceToken] - Service role authentication token
16
17
  * @param {boolean} [config.requiresAuth=false] - Whether the app requires authentication
17
- * @param {AgentsModuleConfig} [config.agents] - Configuration for agents module
18
18
  * @returns {Object} Base44 client instance
19
19
  */
20
20
  export function createClient(config) {
21
- const { serverUrl = "https://base44.app", appId, token, serviceToken, requiresAuth = false, agents = {}, } = config;
21
+ const { serverUrl = "https://base44.app", appId, token, serviceToken, requiresAuth = false, options, } = config;
22
+ const socketConfig = {
23
+ serverUrl,
24
+ mountPath: "/ws-user-apps/socket.io/",
25
+ transports: ["websocket"],
26
+ appId,
27
+ token,
28
+ };
29
+ const socket = RoomsSocket({
30
+ config: socketConfig,
31
+ });
22
32
  const axiosClient = createAxiosClient({
23
33
  baseURL: `${serverUrl}/api`,
24
34
  headers: {
@@ -28,6 +38,7 @@ export function createClient(config) {
28
38
  requiresAuth,
29
39
  appId,
30
40
  serverUrl,
41
+ onError: options === null || options === void 0 ? void 0 : options.onError,
31
42
  });
32
43
  const functionsAxiosClient = createAxiosClient({
33
44
  baseURL: `${serverUrl}/api`,
@@ -39,6 +50,7 @@ export function createClient(config) {
39
50
  appId,
40
51
  serverUrl,
41
52
  interceptResponses: false,
53
+ onError: options === null || options === void 0 ? void 0 : options.onError,
42
54
  });
43
55
  const serviceRoleAxiosClient = createAxiosClient({
44
56
  baseURL: `${serverUrl}/api`,
@@ -48,6 +60,7 @@ export function createClient(config) {
48
60
  token: serviceToken,
49
61
  serverUrl,
50
62
  appId,
63
+ onError: options === null || options === void 0 ? void 0 : options.onError,
51
64
  });
52
65
  const serviceRoleFunctionsAxiosClient = createAxiosClient({
53
66
  baseURL: `${serverUrl}/api`,
@@ -64,14 +77,22 @@ export function createClient(config) {
64
77
  integrations: createIntegrationsModule(axiosClient, appId),
65
78
  auth: createAuthModule(axiosClient, functionsAxiosClient, appId),
66
79
  functions: createFunctionsModule(functionsAxiosClient, appId),
67
- agents: createAgentsModule(axiosClient, appId, agents),
80
+ agents: createAgentsModule({
81
+ axios: axiosClient,
82
+ socket,
83
+ appId,
84
+ }),
68
85
  };
69
86
  const serviceRoleModules = {
70
87
  entities: createEntitiesModule(serviceRoleAxiosClient, appId),
71
88
  integrations: createIntegrationsModule(serviceRoleAxiosClient, appId),
72
89
  sso: createSsoModule(serviceRoleAxiosClient, appId, token),
73
90
  functions: createFunctionsModule(serviceRoleFunctionsAxiosClient, appId),
74
- agents: createAgentsModule(serviceRoleAxiosClient, appId, agents),
91
+ agents: createAgentsModule({
92
+ axios: serviceRoleAxiosClient,
93
+ socket,
94
+ appId,
95
+ }),
75
96
  };
76
97
  // Always try to get token from localStorage or URL parameters
77
98
  if (typeof window !== "undefined") {
@@ -79,6 +100,9 @@ export function createClient(config) {
79
100
  const accessToken = token || getAccessToken();
80
101
  if (accessToken) {
81
102
  userModules.auth.setToken(accessToken);
103
+ socket.updateConfig({
104
+ token: accessToken,
105
+ });
82
106
  }
83
107
  }
84
108
  // If authentication is required, verify token and redirect to login if needed
@@ -106,6 +130,9 @@ export function createClient(config) {
106
130
  */
107
131
  setToken(newToken) {
108
132
  userModules.auth.setToken(newToken);
133
+ socket.updateConfig({
134
+ token: newToken,
135
+ });
109
136
  },
110
137
  /**
111
138
  * Get current configuration
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { createClient, createClientFromRequest } from "./client.js";
2
2
  import { Base44Error } from "./utils/axios-client.js";
3
3
  import { getAccessToken, saveAccessToken, removeAccessToken, getLoginUrl } from "./utils/auth-utils.js";
4
- export type { Message, AgentConversation, CreateConversationPayload, UpdateConversationPayload, FilterParams, AgentsModuleConfig, AgentsModule, } from "./modules/agents.js";
5
4
  export { createClient, createClientFromRequest, Base44Error, getAccessToken, saveAccessToken, removeAccessToken, getLoginUrl, };
@@ -1,85 +1,16 @@
1
+ import { RoomsSocket } from "../utils/socket-utils.js";
2
+ import { AgentConversation, AgentMessage } from "./agents.types.js";
1
3
  import { AxiosInstance } from "axios";
2
- export interface Message {
3
- id: string;
4
- role: "user" | "assistant";
5
- content: string;
6
- timestamp?: string;
7
- metadata?: Record<string, any>;
8
- }
9
- export interface AgentConversation {
10
- id: string;
11
- app_id: string;
12
- created_by_id: string;
13
- agent_name: string;
14
- messages: Message[];
15
- metadata: Record<string, any>;
16
- created_at?: string;
17
- updated_at?: string;
18
- }
19
- export interface CreateConversationPayload {
20
- agent_name: string;
21
- metadata?: Record<string, any>;
22
- }
23
- export interface UpdateConversationPayload {
24
- metadata?: Record<string, any>;
25
- }
26
- export interface FilterParams {
27
- query?: Record<string, any>;
28
- sort?: Record<string, 1 | -1>;
29
- limit?: number;
30
- skip?: number;
31
- }
32
- export interface AgentsModuleConfig {
33
- enableWebSocket?: boolean;
34
- socketUrl?: string;
35
- }
36
- /**
37
- * Create agents module for managing AI agent conversations
38
- */
39
- export declare function createAgentsModule(axiosClient: AxiosInstance, appId: string, config?: AgentsModuleConfig): {
40
- /**
41
- * List all conversations for the current user
42
- */
43
- listConversations(filterParams?: FilterParams): Promise<AgentConversation[]>;
44
- /**
45
- * Get a specific conversation by ID
46
- */
47
- getConversation(conversationId: string): Promise<AgentConversation>;
48
- /**
49
- * Create a new agent conversation
50
- */
51
- createConversation(payload: CreateConversationPayload): Promise<AgentConversation>;
52
- /**
53
- * Update conversation metadata
54
- */
55
- updateConversation(conversationId: string, payload: UpdateConversationPayload): Promise<AgentConversation>;
56
- /**
57
- * Send a message to an agent and get response
58
- */
59
- sendMessage(conversationId: string, message: Omit<Message, "id">): Promise<Message>;
60
- /**
61
- * Delete a message from a conversation
62
- */
63
- deleteMessage(conversationId: string, messageId: string): Promise<void>;
64
- /**
65
- * Subscribe to real-time updates for a conversation
66
- * Requires WebSocket to be enabled in config
67
- */
68
- subscribeToConversation(conversationId: string, onUpdate: (conversation: AgentConversation) => void): () => void;
69
- /**
70
- * Get WebSocket connection status
71
- */
72
- getWebSocketStatus(): {
73
- enabled: boolean;
74
- connected: boolean;
75
- };
76
- /**
77
- * Manually connect WebSocket
78
- */
79
- connectWebSocket(): Promise<void>;
80
- /**
81
- * Disconnect WebSocket
82
- */
83
- disconnectWebSocket(): void;
4
+ export type AgentsModuleConfig = {
5
+ axios: AxiosInstance;
6
+ socket: ReturnType<typeof RoomsSocket>;
7
+ appId: string;
8
+ };
9
+ export declare function createAgentsModule({ axios, socket, appId, }: AgentsModuleConfig): {
10
+ getConversations: () => Promise<AgentConversation[]>;
11
+ getConversation: (conversationId: string) => Promise<AgentConversation | undefined>;
12
+ listConversations: (filterParams: any) => Promise<AgentConversation[]>;
13
+ createConversation: (conversation: any) => Promise<AgentConversation>;
14
+ addMessage: (conversation: any, message: any) => Promise<AgentMessage>;
15
+ subscribeToConversation: (conversationId: string, onUpdate: any) => () => void;
84
16
  };
85
- export type AgentsModule = ReturnType<typeof createAgentsModule>;
@@ -1,251 +1,55 @@
1
- /**
2
- * WebSocket manager for real-time agent conversations
3
- */
4
- class AgentWebSocketManager {
5
- constructor(socketUrl, appId, token) {
6
- this.socket = null;
7
- this.listeners = new Map();
8
- this.reconnectAttempts = 0;
9
- this.maxReconnectAttempts = 5;
10
- this.reconnectDelay = 1000;
11
- this.socketUrl = socketUrl;
12
- this.appId = appId;
13
- this.token = token;
14
- }
15
- connect() {
16
- return new Promise((resolve, reject) => {
17
- var _a;
18
- // Check if WebSocket is available (browser environment)
19
- if (typeof WebSocket === "undefined") {
20
- reject(new Error("WebSocket is not available in this environment"));
21
- return;
22
- }
23
- if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
24
- resolve();
25
- return;
26
- }
27
- try {
28
- const wsUrl = new URL(this.socketUrl);
29
- wsUrl.searchParams.set("appId", this.appId);
30
- if (this.token) {
31
- wsUrl.searchParams.set("token", this.token);
32
- }
33
- this.socket = new WebSocket(wsUrl.toString());
34
- this.socket.onopen = () => {
35
- this.reconnectAttempts = 0;
36
- resolve();
37
- };
38
- this.socket.onmessage = (event) => {
39
- try {
40
- const data = JSON.parse(event.data);
41
- this.handleMessage(data);
42
- }
43
- catch (error) {
44
- console.error("Failed to parse WebSocket message:", error);
45
- }
46
- };
47
- this.socket.onclose = () => {
48
- this.attemptReconnect();
49
- };
50
- this.socket.onerror = (error) => {
51
- console.error("WebSocket error:", error);
52
- reject(error);
53
- };
54
- }
55
- catch (error) {
56
- reject(error);
57
- }
1
+ export function createAgentsModule({ axios, socket, appId, }) {
2
+ let currentConversation = null;
3
+ const baseURL = `/apps/${appId}/agents`;
4
+ const getConversations = () => {
5
+ return axios.get(`${baseURL}/conversations`);
6
+ };
7
+ const getConversation = (conversationId) => {
8
+ return axios.get(`${baseURL}/conversations/${conversationId}`);
9
+ };
10
+ const listConversations = (filterParams) => {
11
+ return axios.get(`${baseURL}/conversations`, {
12
+ params: filterParams,
58
13
  });
59
- }
60
- handleMessage(data) {
61
- var _a;
62
- if (data.event === "update_model" && ((_a = data.data) === null || _a === void 0 ? void 0 : _a.room)) {
63
- const listeners = this.listeners.get(data.data.room);
64
- if (listeners) {
65
- const parsedData = typeof data.data.data === "string"
66
- ? JSON.parse(data.data.data)
67
- : data.data.data;
68
- listeners.forEach((callback) => callback(parsedData));
69
- }
70
- }
71
- }
72
- attemptReconnect() {
73
- if (this.reconnectAttempts >= this.maxReconnectAttempts) {
74
- console.error("Max reconnection attempts reached");
75
- return;
76
- }
77
- this.reconnectAttempts++;
78
- const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
79
- setTimeout(() => {
80
- console.log(`Attempting to reconnect (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
81
- this.connect().catch((error) => {
82
- console.error("Reconnection failed:", error);
83
- });
84
- }, delay);
85
- }
86
- subscribe(room, callback) {
87
- if (!this.listeners.has(room)) {
88
- this.listeners.set(room, new Set());
89
- }
90
- this.listeners.get(room).add(callback);
91
- // Send subscription message if connected
92
- if (typeof WebSocket !== "undefined" &&
93
- this.socket &&
94
- this.socket.readyState === WebSocket.OPEN &&
95
- this.socket.send) {
96
- this.socket.send(JSON.stringify({
97
- type: "subscribe",
98
- room: room,
99
- }));
100
- }
101
- // Return unsubscribe function
102
- return () => {
103
- const roomListeners = this.listeners.get(room);
104
- if (roomListeners) {
105
- roomListeners.delete(callback);
106
- if (roomListeners.size === 0) {
107
- this.listeners.delete(room);
108
- // Send unsubscribe message if connected
109
- if (typeof WebSocket !== "undefined" &&
110
- this.socket &&
111
- this.socket.readyState === WebSocket.OPEN &&
112
- this.socket.send) {
113
- this.socket.send(JSON.stringify({
114
- type: "unsubscribe",
115
- room: room,
116
- }));
117
- }
118
- }
119
- }
120
- };
121
- }
122
- disconnect() {
123
- if (this.socket) {
124
- this.socket.close();
125
- this.socket = null;
14
+ };
15
+ const createConversation = (conversation) => {
16
+ return axios.post(`${baseURL}/conversations`, conversation);
17
+ };
18
+ const addMessage = (conversation, message) => {
19
+ // this whole trick with current conversation so that we can call the onUpdateModel with the latest messages
20
+ let convLatestMessages = null;
21
+ if (currentConversation && currentConversation.id === conversation.id) {
22
+ convLatestMessages = currentConversation.messages;
126
23
  }
127
- this.listeners.clear();
128
- }
129
- isConnected() {
130
- var _a;
131
- if (typeof WebSocket === "undefined") {
132
- return false;
24
+ else {
25
+ currentConversation = conversation;
26
+ convLatestMessages = conversation.messages;
133
27
  }
134
- return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
135
- }
136
- }
137
- /**
138
- * Create agents module for managing AI agent conversations
139
- */
140
- export function createAgentsModule(axiosClient, appId, config = {}) {
141
- var _a, _b;
142
- let webSocketManager = null;
143
- let currentConversation = null;
144
- // Initialize WebSocket if enabled
145
- if (config.enableWebSocket) {
146
- const socketUrl = config.socketUrl || "wss://base44.app/ws";
147
- // Extract token from axios client if available
148
- const token = (_b = (_a = axiosClient.defaults.headers.common) === null || _a === void 0 ? void 0 : _a.Authorization) === null || _b === void 0 ? void 0 : _b.toString().replace("Bearer ", "");
149
- webSocketManager = new AgentWebSocketManager(socketUrl, appId, token);
150
- }
151
- return {
152
- /**
153
- * List all conversations for the current user
154
- */
155
- async listConversations(filterParams) {
156
- const response = await axiosClient.get(`/apps/${appId}/agents/conversations`, {
157
- params: filterParams,
158
- });
159
- return response.data;
160
- },
161
- /**
162
- * Get a specific conversation by ID
163
- */
164
- async getConversation(conversationId) {
165
- const response = await axiosClient.get(`/apps/${appId}/agents/conversations/${conversationId}`);
166
- return response.data;
167
- },
168
- /**
169
- * Create a new agent conversation
170
- */
171
- async createConversation(payload) {
172
- const response = await axiosClient.post(`/apps/${appId}/agents/conversations`, payload);
173
- return response.data;
174
- },
175
- /**
176
- * Update conversation metadata
177
- */
178
- async updateConversation(conversationId, payload) {
179
- const response = await axiosClient.put(`/apps/${appId}/agents/conversations/${conversationId}`, payload);
180
- return response.data;
181
- },
182
- /**
183
- * Send a message to an agent and get response
184
- */
185
- async sendMessage(conversationId, message) {
186
- // Update current conversation for WebSocket tracking
187
- if ((currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.id) === conversationId) {
188
- currentConversation.messages = [
189
- ...currentConversation.messages,
190
- { ...message, id: "temp-" + Date.now() },
191
- ];
192
- }
193
- const response = await axiosClient.post(`/apps/${appId}/agents/conversations/${conversationId}/messages`, message);
194
- return response.data;
195
- },
196
- /**
197
- * Delete a message from a conversation
198
- */
199
- async deleteMessage(conversationId, messageId) {
200
- await axiosClient.delete(`/apps/${appId}/agents/conversations/${conversationId}/messages/${messageId}`);
201
- },
202
- /**
203
- * Subscribe to real-time updates for a conversation
204
- * Requires WebSocket to be enabled in config
205
- */
206
- subscribeToConversation(conversationId, onUpdate) {
207
- if (!webSocketManager) {
208
- throw new Error("WebSocket is not enabled. Set enableWebSocket: true in agents config");
209
- }
210
- // Connect WebSocket if not already connected
211
- if (!webSocketManager.isConnected()) {
212
- webSocketManager.connect().catch((error) => {
213
- console.error("Failed to connect WebSocket:", error);
214
- });
215
- }
216
- return webSocketManager.subscribe(`/agent-conversations/${conversationId}`, (data) => {
217
- // Update current conversation reference
218
- if (data.id === conversationId) {
28
+ conversation.messages = [...convLatestMessages, message];
29
+ socket.handlers.update_model({
30
+ room: `/agent-conversations/${conversation.id}`,
31
+ data: JSON.stringify(conversation),
32
+ });
33
+ return axios.post(`${baseURL}/conversations/${conversation.id}/messages`, message);
34
+ };
35
+ const subscribeToConversation = (conversationId, onUpdate) => {
36
+ return socket.subscribeToRoom(`/agent-conversations/${conversationId}`, {
37
+ connect: () => { },
38
+ update_model: ({ data: jsonStr }) => {
39
+ const data = JSON.parse(jsonStr);
40
+ if (currentConversation && currentConversation.id === data.id) {
219
41
  currentConversation = data;
220
42
  }
221
43
  onUpdate(data);
222
- });
223
- },
224
- /**
225
- * Get WebSocket connection status
226
- */
227
- getWebSocketStatus() {
228
- return {
229
- enabled: !!webSocketManager,
230
- connected: (webSocketManager === null || webSocketManager === void 0 ? void 0 : webSocketManager.isConnected()) || false,
231
- };
232
- },
233
- /**
234
- * Manually connect WebSocket
235
- */
236
- async connectWebSocket() {
237
- if (!webSocketManager) {
238
- throw new Error("WebSocket is not enabled. Set enableWebSocket: true in agents config");
239
- }
240
- await webSocketManager.connect();
241
- },
242
- /**
243
- * Disconnect WebSocket
244
- */
245
- disconnectWebSocket() {
246
- if (webSocketManager) {
247
- webSocketManager.disconnect();
248
- }
249
- },
44
+ },
45
+ });
46
+ };
47
+ return {
48
+ getConversations,
49
+ getConversation,
50
+ listConversations,
51
+ createConversation,
52
+ addMessage,
53
+ subscribeToConversation,
250
54
  };
251
55
  }