@nurama/sdk 0.0.0-stage → 1.4.1

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 (225) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1080 -2
  4. package/dist/BotClient.d.ts +66 -0
  5. package/dist/BotClient.d.ts.map +1 -0
  6. package/dist/BotClient.js +68 -0
  7. package/dist/BotClient.js.map +1 -0
  8. package/dist/NuramaClient.d.ts +480 -0
  9. package/dist/NuramaClient.d.ts.map +1 -0
  10. package/dist/NuramaClient.js +902 -0
  11. package/dist/NuramaClient.js.map +1 -0
  12. package/dist/browser/nurama-bot-sdk.js +12051 -0
  13. package/dist/browser/nurama-bot-sdk.min.js +1 -0
  14. package/dist/browser/nurama-sdk.js +12003 -0
  15. package/dist/browser/nurama-sdk.min.js +1 -0
  16. package/dist/routes/ai.d.ts +280 -0
  17. package/dist/routes/ai.d.ts.map +1 -0
  18. package/dist/routes/ai.js +173 -0
  19. package/dist/routes/ai.js.map +1 -0
  20. package/dist/routes/asset.d.ts +493 -0
  21. package/dist/routes/asset.d.ts.map +1 -0
  22. package/dist/routes/asset.js +848 -0
  23. package/dist/routes/asset.js.map +1 -0
  24. package/dist/routes/auth.d.ts +218 -0
  25. package/dist/routes/auth.d.ts.map +1 -0
  26. package/dist/routes/auth.js +454 -0
  27. package/dist/routes/auth.js.map +1 -0
  28. package/dist/routes/blogPosts.d.ts +17 -0
  29. package/dist/routes/blogPosts.d.ts.map +1 -0
  30. package/dist/routes/blogPosts.js +29 -0
  31. package/dist/routes/blogPosts.js.map +1 -0
  32. package/dist/routes/board.d.ts +187 -0
  33. package/dist/routes/board.d.ts.map +1 -0
  34. package/dist/routes/board.js +270 -0
  35. package/dist/routes/board.js.map +1 -0
  36. package/dist/routes/bot.d.ts +202 -0
  37. package/dist/routes/bot.d.ts.map +1 -0
  38. package/dist/routes/bot.js +229 -0
  39. package/dist/routes/bot.js.map +1 -0
  40. package/dist/routes/chat.d.ts +842 -0
  41. package/dist/routes/chat.d.ts.map +1 -0
  42. package/dist/routes/chat.js +863 -0
  43. package/dist/routes/chat.js.map +1 -0
  44. package/dist/routes/chatAi.d.ts +51 -0
  45. package/dist/routes/chatAi.d.ts.map +1 -0
  46. package/dist/routes/chatAi.js +109 -0
  47. package/dist/routes/chatAi.js.map +1 -0
  48. package/dist/routes/config.d.ts +11 -0
  49. package/dist/routes/config.d.ts.map +1 -0
  50. package/dist/routes/config.js +24 -0
  51. package/dist/routes/config.js.map +1 -0
  52. package/dist/routes/convo.d.ts +169 -0
  53. package/dist/routes/convo.d.ts.map +1 -0
  54. package/dist/routes/convo.js +284 -0
  55. package/dist/routes/convo.js.map +1 -0
  56. package/dist/routes/credits.d.ts +82 -0
  57. package/dist/routes/credits.d.ts.map +1 -0
  58. package/dist/routes/credits.js +49 -0
  59. package/dist/routes/credits.js.map +1 -0
  60. package/dist/routes/device.d.ts +74 -0
  61. package/dist/routes/device.d.ts.map +1 -0
  62. package/dist/routes/device.js +122 -0
  63. package/dist/routes/device.js.map +1 -0
  64. package/dist/routes/folder.d.ts +75 -0
  65. package/dist/routes/folder.d.ts.map +1 -0
  66. package/dist/routes/folder.js +99 -0
  67. package/dist/routes/folder.js.map +1 -0
  68. package/dist/routes/invite.d.ts +61 -0
  69. package/dist/routes/invite.d.ts.map +1 -0
  70. package/dist/routes/invite.js +86 -0
  71. package/dist/routes/invite.js.map +1 -0
  72. package/dist/routes/joinLink.d.ts +88 -0
  73. package/dist/routes/joinLink.d.ts.map +1 -0
  74. package/dist/routes/joinLink.js +205 -0
  75. package/dist/routes/joinLink.js.map +1 -0
  76. package/dist/routes/membership.d.ts +116 -0
  77. package/dist/routes/membership.d.ts.map +1 -0
  78. package/dist/routes/membership.js +183 -0
  79. package/dist/routes/membership.js.map +1 -0
  80. package/dist/routes/notification.d.ts +103 -0
  81. package/dist/routes/notification.d.ts.map +1 -0
  82. package/dist/routes/notification.js +89 -0
  83. package/dist/routes/notification.js.map +1 -0
  84. package/dist/routes/oauthGrant.d.ts +45 -0
  85. package/dist/routes/oauthGrant.d.ts.map +1 -0
  86. package/dist/routes/oauthGrant.js +32 -0
  87. package/dist/routes/oauthGrant.js.map +1 -0
  88. package/dist/routes/payment.d.ts +56 -0
  89. package/dist/routes/payment.d.ts.map +1 -0
  90. package/dist/routes/payment.js +78 -0
  91. package/dist/routes/payment.js.map +1 -0
  92. package/dist/routes/product.d.ts +43 -0
  93. package/dist/routes/product.d.ts.map +1 -0
  94. package/dist/routes/product.js +53 -0
  95. package/dist/routes/product.js.map +1 -0
  96. package/dist/routes/project.d.ts +821 -0
  97. package/dist/routes/project.d.ts.map +1 -0
  98. package/dist/routes/project.js +1153 -0
  99. package/dist/routes/project.js.map +1 -0
  100. package/dist/routes/public.d.ts +269 -0
  101. package/dist/routes/public.d.ts.map +1 -0
  102. package/dist/routes/public.js +412 -0
  103. package/dist/routes/public.js.map +1 -0
  104. package/dist/routes/scratch.d.ts +70 -0
  105. package/dist/routes/scratch.d.ts.map +1 -0
  106. package/dist/routes/scratch.js +67 -0
  107. package/dist/routes/scratch.js.map +1 -0
  108. package/dist/routes/settings.d.ts +102 -0
  109. package/dist/routes/settings.d.ts.map +1 -0
  110. package/dist/routes/settings.js +94 -0
  111. package/dist/routes/settings.js.map +1 -0
  112. package/dist/routes/shortlink.d.ts +79 -0
  113. package/dist/routes/shortlink.d.ts.map +1 -0
  114. package/dist/routes/shortlink.js +25 -0
  115. package/dist/routes/shortlink.js.map +1 -0
  116. package/dist/routes/socket.d.ts +108 -0
  117. package/dist/routes/socket.d.ts.map +1 -0
  118. package/dist/routes/socket.js +573 -0
  119. package/dist/routes/socket.js.map +1 -0
  120. package/dist/routes/storage.d.ts +44 -0
  121. package/dist/routes/storage.d.ts.map +1 -0
  122. package/dist/routes/storage.js +49 -0
  123. package/dist/routes/storage.js.map +1 -0
  124. package/dist/routes/subscription.d.ts +184 -0
  125. package/dist/routes/subscription.d.ts.map +1 -0
  126. package/dist/routes/subscription.js +219 -0
  127. package/dist/routes/subscription.js.map +1 -0
  128. package/dist/routes/supportChat.d.ts +40 -0
  129. package/dist/routes/supportChat.d.ts.map +1 -0
  130. package/dist/routes/supportChat.js +53 -0
  131. package/dist/routes/supportChat.js.map +1 -0
  132. package/dist/routes/supportTicket.d.ts +89 -0
  133. package/dist/routes/supportTicket.d.ts.map +1 -0
  134. package/dist/routes/supportTicket.js +54 -0
  135. package/dist/routes/supportTicket.js.map +1 -0
  136. package/dist/routes/tag.d.ts +72 -0
  137. package/dist/routes/tag.d.ts.map +1 -0
  138. package/dist/routes/tag.js +81 -0
  139. package/dist/routes/tag.js.map +1 -0
  140. package/dist/routes/task.d.ts +252 -0
  141. package/dist/routes/task.d.ts.map +1 -0
  142. package/dist/routes/task.js +284 -0
  143. package/dist/routes/task.js.map +1 -0
  144. package/dist/routes/taskRelation.d.ts +80 -0
  145. package/dist/routes/taskRelation.d.ts.map +1 -0
  146. package/dist/routes/taskRelation.js +71 -0
  147. package/dist/routes/taskRelation.js.map +1 -0
  148. package/dist/routes/token.d.ts +97 -0
  149. package/dist/routes/token.d.ts.map +1 -0
  150. package/dist/routes/token.js +73 -0
  151. package/dist/routes/token.js.map +1 -0
  152. package/dist/routes/user.d.ts +112 -0
  153. package/dist/routes/user.d.ts.map +1 -0
  154. package/dist/routes/user.js +151 -0
  155. package/dist/routes/user.js.map +1 -0
  156. package/dist/routes/version.d.ts +42 -0
  157. package/dist/routes/version.d.ts.map +1 -0
  158. package/dist/routes/version.js +38 -0
  159. package/dist/routes/version.js.map +1 -0
  160. package/dist/routes/webhook.d.ts +170 -0
  161. package/dist/routes/webhook.d.ts.map +1 -0
  162. package/dist/routes/webhook.js +173 -0
  163. package/dist/routes/webhook.js.map +1 -0
  164. package/dist/routes/workspace.d.ts +120 -0
  165. package/dist/routes/workspace.d.ts.map +1 -0
  166. package/dist/routes/workspace.js +199 -0
  167. package/dist/routes/workspace.js.map +1 -0
  168. package/dist/utils/uploadSessionManager.d.ts +133 -0
  169. package/dist/utils/uploadSessionManager.d.ts.map +1 -0
  170. package/dist/utils/uploadSessionManager.js +321 -0
  171. package/dist/utils/uploadSessionManager.js.map +1 -0
  172. package/dist/utils/urlParams.d.ts +35 -0
  173. package/dist/utils/urlParams.d.ts.map +1 -0
  174. package/dist/utils/urlParams.js +146 -0
  175. package/dist/utils/urlParams.js.map +1 -0
  176. package/dist/version.d.ts +15 -0
  177. package/dist/version.d.ts.map +1 -0
  178. package/dist/version.js +12 -0
  179. package/dist/version.js.map +1 -0
  180. package/package.json +87 -3
  181. package/src/BotClient.ts +113 -0
  182. package/src/NuramaClient.ts +1253 -0
  183. package/src/bot-browser-entry.js +15 -0
  184. package/src/browser-entry.js +20 -0
  185. package/src/routes/ai.ts +378 -0
  186. package/src/routes/asset.ts +1104 -0
  187. package/src/routes/auth.ts +587 -0
  188. package/src/routes/blogPosts.ts +29 -0
  189. package/src/routes/board.ts +403 -0
  190. package/src/routes/bot.ts +356 -0
  191. package/src/routes/chat.ts +1292 -0
  192. package/src/routes/chatAi.ts +125 -0
  193. package/src/routes/config.ts +31 -0
  194. package/src/routes/convo.ts +321 -0
  195. package/src/routes/credits.ts +112 -0
  196. package/src/routes/device.ts +133 -0
  197. package/src/routes/folder.ts +154 -0
  198. package/src/routes/invite.ts +133 -0
  199. package/src/routes/joinLink.ts +233 -0
  200. package/src/routes/membership.ts +237 -0
  201. package/src/routes/notification.ts +166 -0
  202. package/src/routes/oauthGrant.ts +64 -0
  203. package/src/routes/payment.ts +104 -0
  204. package/src/routes/product.ts +67 -0
  205. package/src/routes/project.ts +1528 -0
  206. package/src/routes/public.ts +496 -0
  207. package/src/routes/scratch.ts +94 -0
  208. package/src/routes/settings.ts +152 -0
  209. package/src/routes/shortlink.ts +90 -0
  210. package/src/routes/socket.ts +757 -0
  211. package/src/routes/storage.ts +83 -0
  212. package/src/routes/subscription.ts +307 -0
  213. package/src/routes/supportChat.ts +62 -0
  214. package/src/routes/supportTicket.ts +114 -0
  215. package/src/routes/tag.ts +131 -0
  216. package/src/routes/task.ts +431 -0
  217. package/src/routes/taskRelation.ts +125 -0
  218. package/src/routes/token.ts +152 -0
  219. package/src/routes/user.ts +214 -0
  220. package/src/routes/version.ts +62 -0
  221. package/src/routes/webhook.ts +295 -0
  222. package/src/routes/workspace.ts +223 -0
  223. package/src/utils/uploadSessionManager.ts +407 -0
  224. package/src/utils/urlParams.ts +181 -0
  225. package/src/version.ts +22 -0
@@ -0,0 +1,573 @@
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * Listener-set keys that the built-in socket handlers bound in connect()/
4
+ * connectPublic() dispatch to directly (rather than via a subscribe()-bound
5
+ * `socket.on`). When re-establishing subscriptions after an in-place reconnect
6
+ * these must be repopulated on the new connection's listener set, NOT re-run
7
+ * through subscribe() — doing so would bind a second `socket.on` dispatcher and
8
+ * fire each callback twice.
9
+ */
10
+ const LIFECYCLE_LISTENER_EVENTS = new Set([
11
+ 'disconnect',
12
+ 'tokenExpired',
13
+ 'tokenBlacklisted',
14
+ 'reconnect_failed',
15
+ 'reconnect',
16
+ ]);
17
+ /** First reconnect delay; socket.io doubles it per failed attempt, up to RECONNECTION_DELAY_MAX, ±50% jitter. */
18
+ const RECONNECTION_DELAY = 1000;
19
+ const RECONNECTION_DELAY_MAX = 30000;
20
+ /**
21
+ * Extra first-retry delay, up to this, after the SERVER closed the connection ("transport close"): a ws deploy
22
+ * or restart drops every client of that server at once, and without it they would all reconnect within the
23
+ * same second. Network drops ("ping timeout", "transport error") keep the normal 1s retry.
24
+ */
25
+ const SERVER_CLOSE_RECONNECT_SPREAD = 10000;
26
+ /**
27
+ * Spread reconnects after a server-side close (see SERVER_CLOSE_RECONNECT_SPREAD). Sets the manager's next
28
+ * delay from the socket's 'disconnect', which socket.io emits before it schedules the retry, and restores the
29
+ * normal delay on 'connect'. Channels share one manager, so the last channel's draw wins, which is fine.
30
+ */
31
+ const spreadReconnectAfterServerClose = (socket) => {
32
+ const manager = socket.io;
33
+ if (typeof manager?.reconnectionDelay !== 'function')
34
+ return;
35
+ socket.on('disconnect', (reason) => {
36
+ if (reason === 'transport close') {
37
+ manager.reconnectionDelay(RECONNECTION_DELAY + Math.random() * SERVER_CLOSE_RECONNECT_SPREAD);
38
+ }
39
+ });
40
+ socket.on('connect', () => manager.reconnectionDelay(RECONNECTION_DELAY));
41
+ };
42
+ export default function createSocketMethods(client) {
43
+ // Track active socket connections
44
+ const activeConnections = {};
45
+ // Extract configuration from client
46
+ const debug = client.debug;
47
+ /**
48
+ * Log helper for socket-related messages
49
+ */
50
+ const _log = (...args) => {
51
+ if (debug) {
52
+ console.log('[SOCKET]', ...args);
53
+ }
54
+ };
55
+ // We'll need to dynamically import socket.io-client since it's not available in all environments
56
+ const getSocketIO = async () => {
57
+ try {
58
+ // Handle different versions of socket.io-client
59
+ const socketModule = await import('socket.io-client');
60
+ // Socket.io 4.x exports the io function directly
61
+ return socketModule.default || socketModule;
62
+ }
63
+ catch (error) {
64
+ throw new Error('socket.io-client is not installed. Please install it with: npm install socket.io-client');
65
+ }
66
+ };
67
+ /**
68
+ * Get an authentication token for WebSocket connection.
69
+ * Returns the long-lived API key when the client is in bot mode, otherwise the JWT.
70
+ */
71
+ const getAuthToken = () => {
72
+ return client._apiKey || client._getAccessToken();
73
+ };
74
+ /** True when the client is authenticating with a bot API key. */
75
+ const isApiKeyMode = () => Boolean(client._apiKey);
76
+ /**
77
+ * Get the WebSocket server URL
78
+ *
79
+ * Priority:
80
+ * 1. Connection-specific websocketURL (from options)
81
+ * 2. Client-level websocketURL (from client options)
82
+ * 3. Use the baseURL directly - Socket.IO handles protocol conversion
83
+ */
84
+ const getWebSocketURL = (connectionOptions) => {
85
+ // 1. Check connection-specific override
86
+ if (connectionOptions?.websocketURL) {
87
+ return connectionOptions.websocketURL;
88
+ }
89
+ // 2. Check client-level websocketURL
90
+ if (client.websocketURL) {
91
+ return client.websocketURL;
92
+ }
93
+ // 3. Use baseURL directly - Socket.IO handles protocol conversion
94
+ return client.baseURL;
95
+ };
96
+ /**
97
+ * Connect to a socket channel
98
+ * @param channel Channel path to connect to (e.g., '/user/123')
99
+ * @param options Socket connection options
100
+ * @returns Promise that resolves with the socket channel
101
+ */
102
+ const connect = async (channel, options = {}) => {
103
+ _log(`Connecting to channel: ${channel}`);
104
+ // Default options
105
+ const socketOptions = {
106
+ autoRefresh: true,
107
+ autoReconnect: true,
108
+ autoReconnectOnTokenExpiry: true,
109
+ debug: client.debug,
110
+ ...options
111
+ };
112
+ // Check if already connected
113
+ if (activeConnections[channel]) {
114
+ _log(`Already connected to channel: ${channel}`);
115
+ return activeConnections[channel];
116
+ }
117
+ // Get access token
118
+ const token = getAuthToken();
119
+ if (!token) {
120
+ throw new Error('Authentication required. Please login first.');
121
+ }
122
+ // Get WebSocket URL using the helper function - no protocol conversion needed
123
+ const wsUrl = getWebSocketURL(options);
124
+ _log(`Using Socket.IO URL: ${wsUrl}`);
125
+ // Dynamically import socket.io-client
126
+ const io = await getSocketIO();
127
+ // Create socket connection with enhanced reconnection configuration
128
+ const socket = io(`${wsUrl}${channel}`, {
129
+ query: { token },
130
+ // Reconnection configuration for resilience
131
+ reconnection: socketOptions.autoReconnect,
132
+ // Never give up: the server may refuse connections for a while (busy, or a deploy draining), and after a
133
+ // final failure socket.io stops for good without telling the app (the manager's 'reconnect_failed' never
134
+ // reaches socket listeners). Retries settle at one every ~30s.
135
+ reconnectionAttempts: Infinity,
136
+ reconnectionDelay: RECONNECTION_DELAY,
137
+ reconnectionDelayMax: RECONNECTION_DELAY_MAX,
138
+ randomizationFactor: 0.5, // Add jitter to avoid thundering herd problem
139
+ // Connection timeout
140
+ timeout: 20000, // 20 seconds to establish initial connection
141
+ // Transport configuration
142
+ transports: ['websocket', 'polling'], // Prefer WebSocket, fallback to polling
143
+ upgrade: true, // Allow transport upgrade
144
+ rememberUpgrade: true, // Remember successful upgrade
145
+ // Ping/pong for connection health
146
+ forceNew: false, // Reuse existing connection if available
147
+ });
148
+ // Create channel object
149
+ const socketChannel = {
150
+ socket,
151
+ channel,
152
+ listeners: {},
153
+ };
154
+ // Store connection immediately so subscribers can register socket.on handlers
155
+ // even before the connection is fully established. Socket.io preserves
156
+ // handlers across reconnections, so they will fire once connected.
157
+ activeConnections[channel] = socketChannel;
158
+ spreadReconnectAfterServerClose(socket);
159
+ // Setup event listeners
160
+ return new Promise((resolve, reject) => {
161
+ let settled = false;
162
+ let hasConnected = false;
163
+ // Handle connection (initial or after reconnection)
164
+ socket.on('connect', () => {
165
+ _log(`Connected to channel: ${channel}`);
166
+ activeConnections[channel] = socketChannel;
167
+ if (hasConnected) {
168
+ // A second 'connect' on the same socket is socket.io reconnecting it (the manager emits 'reconnect',
169
+ // but socket listeners never see that). Notify app-level onReconnect listeners so they can
170
+ // REST-refetch any gap of server->client messages missed while the transport was down (socket.io has
171
+ // no replay across a reconnect).
172
+ _log(`Reconnected to channel ${channel}`);
173
+ const reconnectListeners = socketChannel.listeners['reconnect'] || new Set();
174
+ reconnectListeners.forEach(listener => listener({ type: 'reconnect' }));
175
+ }
176
+ hasConnected = true;
177
+ if (!settled) {
178
+ settled = true;
179
+ resolve(socketChannel);
180
+ }
181
+ });
182
+ // Handle connection error — log but let socket.io retry
183
+ socket.on('connect_error', (error) => {
184
+ _log(`Connection error for channel ${channel}:`, error);
185
+ // Don't reject — socket.io's auto-reconnect will keep trying
186
+ // Resolve the promise so callers aren't blocked — subscriptions
187
+ // registered via socket.on will fire once the connection succeeds
188
+ if (!settled) {
189
+ settled = true;
190
+ resolve(socketChannel);
191
+ }
192
+ });
193
+ // Handle reconnection failure — only reject when socket.io gives up entirely
194
+ socket.on('reconnect_failed', () => {
195
+ _log(`Reconnection failed for channel ${channel} after maximum attempts`);
196
+ // Emit to listeners for UI feedback
197
+ const eventListeners = socketChannel.listeners['reconnect_failed'] || new Set();
198
+ eventListeners.forEach(listener => listener({ type: 'reconnect_failed' }));
199
+ if (!settled) {
200
+ settled = true;
201
+ reject(new Error(`Connection to ${channel} failed after maximum reconnection attempts`));
202
+ }
203
+ });
204
+ // Handle token events
205
+ socket.on('tokenEvent', (event) => {
206
+ _log(`Token event on channel ${channel}:`, event);
207
+ if (event === 'TokenExpired' && socketOptions.autoReconnectOnTokenExpiry) {
208
+ // API keys don't expire client-side; if the server emits TokenExpired
209
+ // for a bot, treat it as terminal — there's nothing to refresh.
210
+ if (isApiKeyMode()) {
211
+ _log('Token expired event in API key mode — disconnecting (no refresh path)');
212
+ disconnect(channel);
213
+ const eventListeners = socketChannel.listeners['tokenExpired'] || new Set();
214
+ eventListeners.forEach(listener => listener({ type: 'tokenExpired' }));
215
+ return;
216
+ }
217
+ // Refresh token and reconnect
218
+ _log('Token expired, attempting to refresh and reconnect');
219
+ // Call the client's _refreshToken method (using 'as any' for TypeScript)
220
+ client._refreshToken()
221
+ .then(() => {
222
+ _log('Token refreshed, reconnecting');
223
+ // Preserve event subscriptions across the reconnect. connect()
224
+ // builds a brand-new socket whose listeners map starts empty, so
225
+ // without re-binding these the channel reconnects but silently
226
+ // stops delivering 'notification' events — the app-level
227
+ // subscription is lost until a full page reload. This fires on the
228
+ // server's token-expiry sweep (~every 30 min for a long-lived
229
+ // session), so the reconnect must carry the subscriptions over.
230
+ const preservedListeners = socketChannel.listeners;
231
+ disconnect(channel)
232
+ .then(() => connect(channel, options))
233
+ .then((newConnection) => {
234
+ Object.entries(preservedListeners).forEach(([listenerEvent, callbacks]) => {
235
+ callbacks.forEach((callback) => {
236
+ if (LIFECYCLE_LISTENER_EVENTS.has(listenerEvent)) {
237
+ // Built-in handlers on the fresh socket already dispatch
238
+ // these; just repopulate the set they read from.
239
+ if (!newConnection.listeners[listenerEvent]) {
240
+ newConnection.listeners[listenerEvent] = new Set();
241
+ }
242
+ newConnection.listeners[listenerEvent].add(callback);
243
+ }
244
+ else {
245
+ subscribe(channel, listenerEvent, callback);
246
+ }
247
+ });
248
+ });
249
+ // The fresh socket fired 'connect', not 'reconnect', so notify
250
+ // onReconnect listeners here too — a token-refresh reconnect is
251
+ // still a gap that needs the same REST catch-up.
252
+ (newConnection.listeners['reconnect'] || new Set()).forEach(listener => listener({ type: 'reconnect', reason: 'tokenRefresh' }));
253
+ })
254
+ .catch((error) => {
255
+ _log(`Failed to re-establish subscriptions after token refresh on ${channel}:`, error);
256
+ });
257
+ })
258
+ .catch((error) => {
259
+ _log('Failed to refresh token', error);
260
+ // Emit disconnect event to listeners
261
+ const eventListeners = socketChannel.listeners['tokenExpired'] || new Set();
262
+ eventListeners.forEach(listener => listener({ type: 'tokenExpired', error }));
263
+ });
264
+ }
265
+ else if (event === 'tokenBlacklisted') {
266
+ // Force disconnect
267
+ _log('Token blacklisted, disconnecting');
268
+ disconnect(channel);
269
+ // Emit disconnect event to listeners
270
+ const eventListeners = socketChannel.listeners['tokenBlacklisted'] || new Set();
271
+ eventListeners.forEach(listener => listener({ type: 'tokenBlacklisted' }));
272
+ }
273
+ });
274
+ // Handle disconnect
275
+ socket.on('disconnect', (reason) => {
276
+ _log(`Disconnected from channel ${channel}:`, reason);
277
+ // Emit disconnect event to listeners
278
+ const eventListeners = socketChannel.listeners['disconnect'] || new Set();
279
+ eventListeners.forEach(listener => listener({ type: 'disconnect', reason }));
280
+ // Remove from active connections
281
+ delete activeConnections[channel];
282
+ });
283
+ });
284
+ };
285
+ /**
286
+ * Connect to a public socket channel without authentication
287
+ * @param publicToken Public file system token (10-character alphanumeric)
288
+ * @param options Socket connection options
289
+ * @returns Promise that resolves with the socket channel
290
+ */
291
+ const connectPublic = async (publicToken, options = {}) => {
292
+ const channel = `public/${publicToken}`;
293
+ _log(`Connecting to public channel: ${channel}`);
294
+ // Default options
295
+ const socketOptions = {
296
+ autoReconnect: true,
297
+ debug: client.debug,
298
+ ...options
299
+ };
300
+ // Check if already connected
301
+ if (activeConnections[channel]) {
302
+ _log(`Already connected to public channel: ${channel}`);
303
+ return activeConnections[channel];
304
+ }
305
+ // Get WebSocket URL using the helper function
306
+ const wsUrl = getWebSocketURL(options);
307
+ _log(`Using Socket.IO URL for public connection: ${wsUrl}`);
308
+ // Dynamically import socket.io-client
309
+ const io = await getSocketIO();
310
+ // Create socket connection - no token needed for public channels
311
+ const socket = io(`${wsUrl}${channel}`, {
312
+ query: { publicToken },
313
+ // Reconnection configuration for resilience
314
+ reconnection: socketOptions.autoReconnect,
315
+ reconnectionAttempts: Infinity, // as connect(): never give up silently
316
+ reconnectionDelay: RECONNECTION_DELAY,
317
+ reconnectionDelayMax: RECONNECTION_DELAY_MAX,
318
+ randomizationFactor: 0.5,
319
+ // Connection timeout
320
+ timeout: 20000,
321
+ // Transport configuration
322
+ transports: ['websocket', 'polling'],
323
+ upgrade: true,
324
+ rememberUpgrade: true,
325
+ forceNew: false,
326
+ });
327
+ // Create channel object
328
+ const socketChannel = {
329
+ socket,
330
+ channel,
331
+ listeners: {},
332
+ };
333
+ spreadReconnectAfterServerClose(socket);
334
+ // Setup event listeners
335
+ return new Promise((resolve, reject) => {
336
+ // Handle connection
337
+ socket.on('connect', () => {
338
+ _log(`Connected to public channel: ${channel}`);
339
+ activeConnections[channel] = socketChannel;
340
+ resolve(socketChannel);
341
+ });
342
+ // Handle connection error
343
+ socket.on('connect_error', (error) => {
344
+ _log(`Connection error for public channel ${channel}:`, error);
345
+ reject(error);
346
+ });
347
+ // Handle reconnection failure
348
+ socket.on('reconnect_failed', () => {
349
+ _log(`Reconnection failed for public channel ${channel} after maximum attempts`);
350
+ const eventListeners = socketChannel.listeners['reconnect_failed'] || new Set();
351
+ eventListeners.forEach(listener => listener({ type: 'reconnect_failed' }));
352
+ });
353
+ // Handle disconnect
354
+ socket.on('disconnect', (reason) => {
355
+ _log(`Disconnected from public channel ${channel}:`, reason);
356
+ // Emit disconnect event to listeners
357
+ const eventListeners = socketChannel.listeners['disconnect'] || new Set();
358
+ eventListeners.forEach(listener => listener({ type: 'disconnect', reason }));
359
+ // Remove from active connections
360
+ delete activeConnections[channel];
361
+ });
362
+ });
363
+ };
364
+ /**
365
+ * Disconnect from a socket channel
366
+ * @param channel Channel to disconnect from
367
+ */
368
+ const disconnect = async (channel) => {
369
+ const connection = activeConnections[channel];
370
+ if (connection) {
371
+ _log(`Disconnecting from channel: ${channel}`);
372
+ connection.socket.disconnect();
373
+ delete activeConnections[channel];
374
+ }
375
+ };
376
+ /**
377
+ * Subscribe to an event on a channel
378
+ * @param channel Channel to subscribe to
379
+ * @param event Event name to listen for
380
+ * @param callback Callback function to handle events
381
+ */
382
+ const subscribe = async (channel, event, callback) => {
383
+ // Get or create connection
384
+ let connection = activeConnections[channel];
385
+ if (!connection) {
386
+ connection = await connect(channel);
387
+ }
388
+ // Initialize listeners set for this event if needed
389
+ if (!connection.listeners[event]) {
390
+ connection.listeners[event] = new Set();
391
+ // Add socket listener for this event
392
+ connection.socket.on(event, (eventData) => {
393
+ _log(`Received event '${event}' on channel ${channel}:`, eventData);
394
+ // Call all registered callbacks
395
+ const eventListeners = connection.listeners[event] || new Set();
396
+ eventListeners.forEach(listener => listener(eventData));
397
+ });
398
+ }
399
+ // Add callback to listeners
400
+ connection.listeners[event].add(callback);
401
+ _log(`Subscribed to event '${event}' on channel ${channel}`);
402
+ };
403
+ /**
404
+ * Subscribe to an event on a public channel
405
+ * Automatically connects to the public channel if not already connected
406
+ * @param publicToken Public file system token (10-character alphanumeric)
407
+ * @param event Event name to listen for
408
+ * @param callback Callback function to handle events
409
+ */
410
+ const subscribePublic = async (publicToken, event, callback) => {
411
+ const channel = `public/${publicToken}`;
412
+ // Get or create public connection
413
+ let connection = activeConnections[channel];
414
+ if (!connection) {
415
+ connection = await connectPublic(publicToken);
416
+ }
417
+ // Initialize listeners set for this event if needed
418
+ if (!connection.listeners[event]) {
419
+ connection.listeners[event] = new Set();
420
+ // Add socket listener for this event
421
+ connection.socket.on(event, (eventData) => {
422
+ _log(`Received event '${event}' on public channel ${channel}:`, eventData);
423
+ // Call all registered callbacks
424
+ const eventListeners = connection.listeners[event] || new Set();
425
+ eventListeners.forEach(listener => listener(eventData));
426
+ });
427
+ }
428
+ // Add callback to listeners
429
+ connection.listeners[event].add(callback);
430
+ _log(`Subscribed to event '${event}' on public channel ${channel}`);
431
+ };
432
+ /**
433
+ * Unsubscribe from an event on a channel
434
+ * @param channel Channel to unsubscribe from
435
+ * @param event Event name to stop listening for
436
+ * @param callback Callback function to remove (if not provided, all callbacks will be removed)
437
+ */
438
+ /**
439
+ * Stop listening for an event on a channel. If `callback` is provided,
440
+ * only that specific listener is removed; otherwise every listener for
441
+ * that event is cleared.
442
+ *
443
+ * @param channel Channel to unsubscribe from
444
+ * @param event Event name to stop listening for
445
+ * @param callback Specific callback to remove (optional)
446
+ */
447
+ const unsubscribe = (channel, event, callback) => {
448
+ const connection = activeConnections[channel];
449
+ if (!connection || !connection.listeners[event]) {
450
+ return;
451
+ }
452
+ if (callback) {
453
+ // Remove specific callback
454
+ connection.listeners[event].delete(callback);
455
+ _log(`Unsubscribed specific callback from event '${event}' on channel ${channel}`);
456
+ }
457
+ else {
458
+ // Remove all callbacks
459
+ connection.listeners[event].clear();
460
+ connection.socket.off(event);
461
+ _log(`Unsubscribed all callbacks from event '${event}' on channel ${channel}`);
462
+ }
463
+ };
464
+ /**
465
+ * Check if connected to a channel
466
+ * @param channel Channel to check
467
+ * @returns True if connected, false otherwise
468
+ */
469
+ const isConnected = (channel) => {
470
+ return !!activeConnections[channel]?.socket.connected;
471
+ };
472
+ /**
473
+ * Emit an event to a connected channel
474
+ * @param channel Channel to emit to
475
+ * @param event Event name
476
+ * @param data Event data
477
+ */
478
+ const emit = (channel, event, data) => {
479
+ const connection = activeConnections[channel];
480
+ if (!connection?.socket.connected) {
481
+ _log(`Cannot emit to channel ${channel}: not connected`);
482
+ return;
483
+ }
484
+ _log(`Emitting '${event}' on channel ${channel}`);
485
+ connection.socket.emit(event, data);
486
+ };
487
+ /**
488
+ * Emit an event with a timeout-bounded server acknowledgement. Resolves
489
+ * `true` if the server acks within `timeoutMs`, `false` on timeout or
490
+ * transport error. Used by the FE WS layer (`WebSocketManager.probeChannel`)
491
+ * to actively verify a channel's liveness when `socket.connected` may be
492
+ * stale — most notably after a backgrounded tab returns to focus, where
493
+ * the flag can remain `true` for up to socket.io's own heartbeat window
494
+ * (~25–45s) even after the underlying TCP transport has died.
495
+ *
496
+ * Relies on socket.io v4's `socket.timeout(ms).emit(ev, data, cb)`
497
+ * pattern: the BE handler invokes `ack()` (its trailing callback arg);
498
+ * if no ack arrives within `timeoutMs` the cb is invoked with an Error.
499
+ */
500
+ const emitWithAck = (channel, event, data, timeoutMs) => {
501
+ const connection = activeConnections[channel];
502
+ if (!connection)
503
+ return Promise.resolve(false);
504
+ return new Promise((resolve) => {
505
+ try {
506
+ connection.socket.timeout(timeoutMs).emit(event, data, (err) => {
507
+ resolve(!err);
508
+ });
509
+ }
510
+ catch (error) {
511
+ _log(`emitWithAck error on channel ${channel}:`, error);
512
+ resolve(false);
513
+ }
514
+ });
515
+ };
516
+ /**
517
+ * Disconnect from all channels
518
+ */
519
+ const disconnectAll = async () => {
520
+ _log('Disconnecting from all channels');
521
+ const channels = Object.keys(activeConnections);
522
+ for (const channel of channels) {
523
+ await disconnect(channel);
524
+ }
525
+ };
526
+ /**
527
+ * Register a callback for when Socket.IO exhausts all reconnection attempts
528
+ * @param channel Channel to monitor
529
+ * @param callback Callback invoked when reconnection fails permanently
530
+ */
531
+ const onReconnectFailed = (channel, callback) => {
532
+ const connection = activeConnections[channel];
533
+ if (connection) {
534
+ // Add to the channel's listener set so the existing reconnect_failed
535
+ // handler in connect()/connectPublic() dispatches to it
536
+ if (!connection.listeners['reconnect_failed']) {
537
+ connection.listeners['reconnect_failed'] = new Set();
538
+ }
539
+ connection.listeners['reconnect_failed'].add(callback);
540
+ }
541
+ };
542
+ /**
543
+ * Register a callback for when the channel reconnects — a socket.io
544
+ * transport-level reconnect, or the token-refresh reconnect. Use it to recover
545
+ * any gap of server->client messages missed while the connection was down;
546
+ * socket.io does not replay those. Dispatched from the 'reconnect' handler in
547
+ * connect() and from the token-refresh path.
548
+ */
549
+ const onReconnect = (channel, callback) => {
550
+ const connection = activeConnections[channel];
551
+ if (connection) {
552
+ if (!connection.listeners['reconnect']) {
553
+ connection.listeners['reconnect'] = new Set();
554
+ }
555
+ connection.listeners['reconnect'].add(callback);
556
+ }
557
+ };
558
+ return {
559
+ connect,
560
+ connectPublic,
561
+ disconnect,
562
+ disconnectAll,
563
+ subscribe,
564
+ subscribePublic,
565
+ unsubscribe,
566
+ isConnected,
567
+ emit,
568
+ emitWithAck,
569
+ onReconnect,
570
+ onReconnectFailed,
571
+ };
572
+ }
573
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/routes/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import NuramaClient from '../NuramaClient.js';
2
+ export type ResourceType = 'user' | 'workspace' | 'project' | 'chat' | 'asset';
3
+ export interface GetStorageChartParams {
4
+ startDate?: number;
5
+ endDate?: number;
6
+ aggregationPeriod?: 'year' | 'month' | 'week' | 'day';
7
+ }
8
+ export interface ChartDataEntry {
9
+ period: string;
10
+ averageSizeInBytes: number;
11
+ }
12
+ export type ChartDataResponse = ChartDataEntry[];
13
+ export interface StorageRecord {
14
+ resourceId: string;
15
+ resourceType: ResourceType;
16
+ sizeInBytes: number;
17
+ id: string;
18
+ }
19
+ /**
20
+ * Defines storage-related methods for the NuramaClient.
21
+ * @param {NuramaClient} client - The NuramaClient instance.
22
+ * @returns {object} An object containing the storage-related methods.
23
+ */
24
+ export default function createStorageMethods(client: NuramaClient): {
25
+ /**
26
+ * Retrieves storage usage chart data for a specific resource.
27
+ * Requires authentication and permission.
28
+ * @param {ResourceType} resourceType - The type of the resource.
29
+ * @param {string} resourceId - The ID of the resource.
30
+ * @param {GetStorageChartParams} [params] - Optional query parameters for date range and aggregation.
31
+ * @returns {Promise<ChartDataResponse>} An array of chart data entries.
32
+ */
33
+ getStorageChart(resourceType: ResourceType, resourceId: string, params?: GetStorageChartParams): Promise<ChartDataResponse>;
34
+ /**
35
+ * Retrieves the latest storage record for a specific resource.
36
+ * Requires authentication and permission.
37
+ * @param {ResourceType} resourceType - The type of the resource.
38
+ * @param {string} resourceId - The ID of the resource.
39
+ * @returns {Promise<StorageRecord>} The latest storage record for the resource.
40
+ */
41
+ getStorageRecord(resourceType: ResourceType, resourceId: string): Promise<StorageRecord>;
42
+ };
43
+ export type StorageMethods = ReturnType<typeof createStorageMethods>;
44
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/routes/storage.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAG9C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAG/E,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;CACzD;AAGD,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,EAAE,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACd;AAID;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,MAAM,EAAE,YAAY;IAE7D;;;;;;;WAOO;kCAES,YAAY,cACd,MAAM,WACT,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAW7B;;;;;;WAMO;mCAES,YAAY,cACd,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;EAU5B;AAGD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC"}