@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,321 @@
1
+ /**
2
+ * Upload Session Manager for Nurama SDK
3
+ *
4
+ * Provides upload progress persistence and cross-tab synchronization
5
+ * - Persists upload progress to localStorage with project isolation
6
+ * - Syncs upload state across multiple browser tabs
7
+ * - Automatic cleanup of completed/failed uploads
8
+ */
9
+ export class UploadSessionManager {
10
+ constructor() {
11
+ this.messageListeners = new Map();
12
+ this.STORAGE_PREFIX = 'nurama_upload_session_';
13
+ this.MESSAGE_CHANNEL = 'nurama_upload_sync';
14
+ this.initializeCrossTabSync();
15
+ }
16
+ static getInstance() {
17
+ if (!UploadSessionManager.instance) {
18
+ UploadSessionManager.instance = new UploadSessionManager();
19
+ }
20
+ return UploadSessionManager.instance;
21
+ }
22
+ /**
23
+ * Initialize cross-tab synchronization using BroadcastChannel
24
+ */
25
+ initializeCrossTabSync() {
26
+ if (typeof window !== 'undefined' && 'BroadcastChannel' in window) {
27
+ try {
28
+ this.broadcastChannel = new BroadcastChannel(this.MESSAGE_CHANNEL);
29
+ this.broadcastChannel.addEventListener('message', this.handleCrossTabMessage.bind(this));
30
+ }
31
+ catch (error) {
32
+ console.warn('[UploadSessionManager] BroadcastChannel not available:', error);
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * Handle cross-tab messages
38
+ */
39
+ handleCrossTabMessage(event) {
40
+ const message = event.data;
41
+ if (message && message.type && message.projectId && message.sessionId) {
42
+ // Notify registered listeners
43
+ this.messageListeners.forEach(listener => {
44
+ try {
45
+ listener(message);
46
+ }
47
+ catch (error) {
48
+ console.error('[UploadSessionManager] Error in message listener:', error);
49
+ }
50
+ });
51
+ }
52
+ }
53
+ /**
54
+ * Generate storage key for upload session
55
+ */
56
+ getStorageKey(projectId, sessionId) {
57
+ return `${this.STORAGE_PREFIX}${projectId}_${sessionId}`;
58
+ }
59
+ /**
60
+ * Create a new upload session
61
+ */
62
+ createSession(projectId, sessionId, uploadData) {
63
+ const session = {
64
+ sessionId,
65
+ projectId,
66
+ uploadId: uploadData.uploadId,
67
+ key: uploadData.key,
68
+ assetId: uploadData.assetId,
69
+ progress: 0,
70
+ partNumber: 1,
71
+ totalParts: uploadData.totalParts,
72
+ completedParts: [],
73
+ fileName: uploadData.fileName,
74
+ fileSize: uploadData.fileSize,
75
+ timestamp: Date.now(),
76
+ status: 'uploading'
77
+ };
78
+ this.saveSession(session);
79
+ this.broadcastMessage('upload_status_change', projectId, sessionId, session);
80
+ return session;
81
+ }
82
+ /**
83
+ * Update upload progress for a session
84
+ */
85
+ updateProgress(projectId, sessionId, progress) {
86
+ const session = this.getSession(projectId, sessionId);
87
+ if (!session) {
88
+ console.warn(`[UploadSessionManager] Session not found: ${sessionId}`);
89
+ return;
90
+ }
91
+ const updatedSession = {
92
+ ...session,
93
+ progress: progress.progress,
94
+ partNumber: progress.partNumber,
95
+ completedParts: progress.completedParts || session.completedParts,
96
+ timestamp: Date.now()
97
+ };
98
+ this.saveSession(updatedSession);
99
+ this.broadcastMessage('upload_progress_update', projectId, sessionId, {
100
+ progress: progress.progress,
101
+ partNumber: progress.partNumber,
102
+ completedParts: progress.completedParts,
103
+ timestamp: updatedSession.timestamp
104
+ });
105
+ }
106
+ /**
107
+ * Update upload status
108
+ */
109
+ updateStatus(projectId, sessionId, status, error) {
110
+ const session = this.getSession(projectId, sessionId);
111
+ if (!session) {
112
+ console.warn(`[UploadSessionManager] Session not found: ${sessionId}`);
113
+ return;
114
+ }
115
+ const updatedSession = {
116
+ ...session,
117
+ status,
118
+ error,
119
+ timestamp: Date.now()
120
+ };
121
+ this.saveSession(updatedSession);
122
+ this.broadcastMessage('upload_status_change', projectId, sessionId, {
123
+ status,
124
+ error,
125
+ timestamp: updatedSession.timestamp
126
+ });
127
+ }
128
+ /**
129
+ * Get upload session data
130
+ */
131
+ getSession(projectId, sessionId) {
132
+ if (typeof window === 'undefined')
133
+ return null;
134
+ try {
135
+ const key = this.getStorageKey(projectId, sessionId);
136
+ const data = localStorage.getItem(key);
137
+ if (data) {
138
+ const session = JSON.parse(data);
139
+ // Validate session data
140
+ if (session.projectId === projectId && session.sessionId === sessionId) {
141
+ return session;
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ console.warn(`[UploadSessionManager] Failed to get session ${sessionId}:`, error);
147
+ }
148
+ return null;
149
+ }
150
+ /**
151
+ * Get all upload sessions for a project
152
+ */
153
+ getProjectSessions(projectId) {
154
+ if (typeof window === 'undefined')
155
+ return [];
156
+ const sessions = [];
157
+ const prefix = `${this.STORAGE_PREFIX}${projectId}_`;
158
+ try {
159
+ for (let i = 0; i < localStorage.length; i++) {
160
+ const key = localStorage.key(i);
161
+ if (key && key.startsWith(prefix)) {
162
+ const data = localStorage.getItem(key);
163
+ if (data) {
164
+ try {
165
+ const session = JSON.parse(data);
166
+ if (session.projectId === projectId) {
167
+ sessions.push(session);
168
+ }
169
+ }
170
+ catch (error) {
171
+ console.warn(`[UploadSessionManager] Invalid session data in ${key}:`, error);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ console.warn('[UploadSessionManager] Failed to get project sessions:', error);
179
+ }
180
+ // Sort by timestamp (most recent first)
181
+ return sessions.sort((a, b) => b.timestamp - a.timestamp);
182
+ }
183
+ /**
184
+ * Get every upload session across ALL projects (scans the whole localStorage
185
+ * prefix, not a single project). Used by app-level guards that need a global
186
+ * "is anything uploading right now" answer without knowing the project id.
187
+ */
188
+ getAllSessions() {
189
+ if (typeof window === 'undefined')
190
+ return [];
191
+ const sessions = [];
192
+ try {
193
+ for (let i = 0; i < localStorage.length; i++) {
194
+ const key = localStorage.key(i);
195
+ if (key && key.startsWith(this.STORAGE_PREFIX)) {
196
+ const data = localStorage.getItem(key);
197
+ if (data) {
198
+ try {
199
+ sessions.push(JSON.parse(data));
200
+ }
201
+ catch (error) {
202
+ console.warn(`[UploadSessionManager] Invalid session data in ${key}:`, error);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ catch (error) {
209
+ console.warn('[UploadSessionManager] Failed to enumerate sessions:', error);
210
+ }
211
+ return sessions.sort((a, b) => b.timestamp - a.timestamp);
212
+ }
213
+ /**
214
+ * True when at least one upload is genuinely in flight anywhere in the app.
215
+ *
216
+ * "In flight" = status `uploading`/`completing` AND updated within `staleMs`.
217
+ * The freshness window matters: a tab that crashed mid-upload leaves an
218
+ * `uploading` row in localStorage forever (it never reaches a terminal
219
+ * status). Progress ticks bump `timestamp` on every part, so a real upload
220
+ * stays fresh; a dead one goes stale and stops counting — otherwise a stale
221
+ * row would block app refreshes/navigation indefinitely.
222
+ *
223
+ * @param staleMs How long since the last progress update still counts as
224
+ * active. Default 2 minutes — comfortably longer than a single part PUT on
225
+ * a slow connection, short enough that a crashed upload clears quickly.
226
+ */
227
+ hasActiveUploads(staleMs = 2 * 60 * 1000) {
228
+ const cutoff = Date.now() - staleMs;
229
+ return this.getAllSessions().some((s) => (s.status === 'uploading' || s.status === 'completing') &&
230
+ s.timestamp >= cutoff);
231
+ }
232
+ /**
233
+ * Save session to localStorage
234
+ */
235
+ saveSession(session) {
236
+ if (typeof window === 'undefined')
237
+ return;
238
+ try {
239
+ const key = this.getStorageKey(session.projectId, session.sessionId);
240
+ localStorage.setItem(key, JSON.stringify(session));
241
+ }
242
+ catch (error) {
243
+ console.warn(`[UploadSessionManager] Failed to save session ${session.sessionId}:`, error);
244
+ }
245
+ }
246
+ /**
247
+ * Remove upload session
248
+ */
249
+ removeSession(projectId, sessionId) {
250
+ if (typeof window === 'undefined')
251
+ return;
252
+ try {
253
+ const key = this.getStorageKey(projectId, sessionId);
254
+ localStorage.removeItem(key);
255
+ this.broadcastMessage('upload_cleanup', projectId, sessionId);
256
+ }
257
+ catch (error) {
258
+ console.warn(`[UploadSessionManager] Failed to remove session ${sessionId}:`, error);
259
+ }
260
+ }
261
+ /**
262
+ * Clean up old or completed sessions
263
+ */
264
+ cleanupSessions(projectId, olderThanMs = 24 * 60 * 60 * 1000) {
265
+ const sessions = this.getProjectSessions(projectId);
266
+ const cutoff = Date.now() - olderThanMs;
267
+ sessions.forEach(session => {
268
+ // Remove old sessions or completed/failed/cancelled sessions older than 1 hour
269
+ const shouldRemove = session.timestamp < cutoff ||
270
+ (['completed', 'failed', 'cancelled'].includes(session.status) &&
271
+ session.timestamp < (Date.now() - 60 * 60 * 1000));
272
+ if (shouldRemove) {
273
+ this.removeSession(projectId, session.sessionId);
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ * Register a listener for cross-tab messages
279
+ */
280
+ onMessage(listenerId, callback) {
281
+ this.messageListeners.set(listenerId, callback);
282
+ }
283
+ /**
284
+ * Unregister a message listener
285
+ */
286
+ offMessage(listenerId) {
287
+ this.messageListeners.delete(listenerId);
288
+ }
289
+ /**
290
+ * Broadcast a message to other tabs
291
+ */
292
+ broadcastMessage(type, projectId, sessionId, data) {
293
+ if (this.broadcastChannel) {
294
+ try {
295
+ const message = {
296
+ type,
297
+ projectId,
298
+ sessionId,
299
+ data
300
+ };
301
+ this.broadcastChannel.postMessage(message);
302
+ }
303
+ catch (error) {
304
+ console.warn('[UploadSessionManager] Failed to broadcast message:', error);
305
+ }
306
+ }
307
+ }
308
+ /**
309
+ * Cleanup resources
310
+ */
311
+ destroy() {
312
+ if (this.broadcastChannel) {
313
+ this.broadcastChannel.close();
314
+ this.broadcastChannel = undefined;
315
+ }
316
+ this.messageListeners.clear();
317
+ }
318
+ }
319
+ // Export a singleton instance for convenience
320
+ export const uploadSessionManager = UploadSessionManager.getInstance();
321
+ //# sourceMappingURL=uploadSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadSessionManager.js","sourceRoot":"","sources":["../../src/utils/uploadSessionManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgCH,MAAM,OAAO,oBAAoB;IAO/B;QALQ,qBAAgB,GAAoD,IAAI,GAAG,EAAE,CAAC;QACrE,mBAAc,GAAG,wBAAwB,CAAC;QAC1C,oBAAe,GAAG,oBAAoB,CAAC;QAItD,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACnC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,oBAAoB,CAAC,QAAQ,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAAC;YAClE,IAAI,CAAC;gBACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAoC;QAChE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtE,8BAA8B;YAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACvC,IAAI,CAAC;oBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,SAAiB,EAAE,SAAiB;QACxD,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,aAAa,CAClB,SAAiB,EACjB,SAAiB,EACjB,UAOC;QAED,MAAM,OAAO,GAAsB;YACjC,SAAS;YACT,SAAS;YACT,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,GAAG,EAAE,UAAU,CAAC,GAAG;YACnB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,cAAc,EAAE,EAAE;YAClB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,WAAW;SACpB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,cAAc,CACnB,SAAiB,EACjB,SAAiB,EACjB,QAIC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAsB;YACxC,GAAG,OAAO;YACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc;YACjE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,SAAS,EAAE,SAAS,EAAE;YACpE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,SAAS,EAAE,cAAc,CAAC,SAAS;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,YAAY,CACjB,SAAiB,EACjB,SAAiB,EACjB,MAAmC,EACnC,KAAc;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAsB;YACxC,GAAG,OAAO;YACV,MAAM;YACN,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE;YAClE,MAAM;YACN,KAAK;YACL,SAAS,EAAE,cAAc,CAAC,SAAS;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,SAAiB,EAAE,SAAiB;QACpD,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;gBACtD,wBAAwB;gBACxB,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBACvE,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gDAAgD,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,SAAiB;QACzC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAE7C,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,CAAC;QAErD,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;4BACtD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gCACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;4BACzB,CAAC;wBACH,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;wBAChF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;QAED,wCAAwC;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,cAAc;QACnB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAE7C,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC;4BACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC,CAAC;wBACvD,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;wBAChF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,gBAAgB,CAAC,UAAkB,CAAC,GAAG,EAAE,GAAG,IAAI;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACpC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC;YACvD,CAAC,CAAC,SAAS,IAAI,MAAM,CACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAA0B;QAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACrE,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,OAAO,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,SAAiB,EAAE,SAAiB;QACvD,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,SAAiB,EAAE,cAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QAExC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,+EAA+E;YAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM;gBAC7C,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC7D,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAEtD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,UAAkB,EAAE,QAA4C;QAC/E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,UAAkB;QAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,IAA6B,EAC7B,SAAiB,EACjB,SAAiB,EACjB,IAAiC;QAEjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAoB;oBAC/B,IAAI;oBACJ,SAAS;oBACT,SAAS;oBACT,IAAI;iBACL,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;CACF;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Utility functions for handling URL parameters
3
+ */
4
+ /**
5
+ * Converts a parameter object to URL-safe query parameters.
6
+ * Arrays are serialized as comma-separated values, using bracket notation, or as repeated parameters.
7
+ * Objects are serialized as JSON strings.
8
+ *
9
+ * @param params - The parameter object to convert
10
+ * @param options - Options for serialization
11
+ * @returns An array of [key, value] pairs suitable for URLSearchParams
12
+ */
13
+ export interface UrlParamsOptions {
14
+ /** How to handle arrays: 'comma' for comma-separated, 'brackets' for key[]=value&key[]=value2, 'repeat' for key=value1&key=value2 */
15
+ arrayFormat?: 'comma' | 'brackets' | 'repeat';
16
+ /** How to handle nested objects: 'json' to stringify, 'dot' for dot notation, 'bracket' for key[subkey]=value */
17
+ objectFormat?: 'json' | 'dot' | 'bracket';
18
+ /** Whether to encode values (default: true) */
19
+ encode?: boolean;
20
+ }
21
+ export declare function parseUrlParams(params: Record<string, any>, options?: UrlParamsOptions): Array<[string, string]>;
22
+ /**
23
+ * Converts parsed URL parameters back to a URLSearchParams object
24
+ * @param params - The parsed parameters as key-value pairs
25
+ * @returns URLSearchParams object
26
+ */
27
+ export declare function createUrlSearchParams(params: Array<[string, string]>): URLSearchParams;
28
+ /**
29
+ * Convenience function that combines parseUrlParams and createUrlSearchParams
30
+ * @param params - The parameter object to convert
31
+ * @param options - Options for serialization
32
+ * @returns URLSearchParams object
33
+ */
34
+ export declare function paramsToUrlSearchParams(params: Record<string, any>, options?: UrlParamsOptions): URLSearchParams;
35
+ //# sourceMappingURL=urlParams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlParams.d.ts","sourceRoot":"","sources":["../../src/utils/urlParams.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qIAAqI;IACrI,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,iHAAiH;IACjH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1C,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkEzB;AA8DD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,eAAe,CAMtF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,eAAe,CAKjB"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Utility functions for handling URL parameters
3
+ */
4
+ export function parseUrlParams(params, options = {}) {
5
+ const { arrayFormat = 'repeat', // Changed default to repeat for backend compatibility
6
+ objectFormat = 'bracket', // Changed default to bracket for API compatibility
7
+ encode = true // Changed default to true as requested
8
+ } = options;
9
+ const result = [];
10
+ const encodeValue = (value) => {
11
+ return encode ? encodeURIComponent(value) : value;
12
+ };
13
+ const processValue = (key, value) => {
14
+ if (value === null || value === undefined) {
15
+ return; // Skip null/undefined values
16
+ }
17
+ if (Array.isArray(value)) {
18
+ if (arrayFormat === 'comma') {
19
+ // Convert array to comma-separated string
20
+ result.push([key, encodeValue(value.join(','))]);
21
+ }
22
+ else if (arrayFormat === 'brackets') {
23
+ // Use bracket notation: key[]=value1&key[]=value2
24
+ const bracketKey = `${key}[]`;
25
+ value.forEach((item) => {
26
+ result.push([bracketKey, encodeValue(String(item))]);
27
+ });
28
+ }
29
+ else if (arrayFormat === 'repeat') {
30
+ // Use repeated key: key=value1&key=value2
31
+ value.forEach((item) => {
32
+ result.push([key, encodeValue(String(item))]);
33
+ });
34
+ }
35
+ }
36
+ else if (value instanceof Date) {
37
+ // Handle Date objects specifically
38
+ result.push([key, encodeValue(value.toString())]);
39
+ }
40
+ else if (typeof value === 'object') {
41
+ if (objectFormat === 'json') {
42
+ // Stringify objects as JSON
43
+ result.push([key, encodeValue(JSON.stringify(value))]);
44
+ }
45
+ else if (objectFormat === 'dot') {
46
+ // Use dot notation for nested objects
47
+ flattenObject(value, key, result, encodeValue);
48
+ }
49
+ else if (objectFormat === 'bracket') {
50
+ // Use bracket notation for nested objects
51
+ flattenObjectBracket(value, key, result, encodeValue);
52
+ }
53
+ }
54
+ else if (typeof value === 'boolean') {
55
+ result.push([key, encodeValue(value.toString())]);
56
+ }
57
+ else if (typeof value === 'number') {
58
+ result.push([key, encodeValue(value.toString())]);
59
+ }
60
+ else if (typeof value === 'string') {
61
+ result.push([key, encodeValue(value)]);
62
+ }
63
+ else {
64
+ // For any other type, convert to string
65
+ result.push([key, encodeValue(String(value))]);
66
+ }
67
+ };
68
+ // Process each parameter
69
+ Object.entries(params).forEach(([key, value]) => {
70
+ processValue(key, value);
71
+ });
72
+ return result;
73
+ }
74
+ /**
75
+ * Flattens nested objects using dot notation
76
+ * @param obj - The object to flatten
77
+ * @param prefix - The current key prefix
78
+ * @param result - The result array to populate
79
+ * @param encodeValue - Function to encode values
80
+ */
81
+ function flattenObject(obj, prefix, result, encodeValue) {
82
+ Object.entries(obj).forEach(([key, value]) => {
83
+ const newKey = `${prefix}.${key}`;
84
+ if (value === null || value === undefined) {
85
+ return;
86
+ }
87
+ if (typeof value === 'object' && !Array.isArray(value)) {
88
+ flattenObject(value, newKey, result, encodeValue);
89
+ }
90
+ else if (Array.isArray(value)) {
91
+ result.push([newKey, encodeValue(value.join(','))]);
92
+ }
93
+ else {
94
+ result.push([newKey, encodeValue(String(value))]);
95
+ }
96
+ });
97
+ }
98
+ /**
99
+ * Flattens nested objects using bracket notation
100
+ * @param obj - The object to flatten
101
+ * @param prefix - The current key prefix
102
+ * @param result - The result array to populate
103
+ * @param encodeValue - Function to encode values
104
+ */
105
+ function flattenObjectBracket(obj, prefix, result, encodeValue) {
106
+ Object.entries(obj).forEach(([key, value]) => {
107
+ const newKey = `${prefix}[${key}]`;
108
+ if (value === null || value === undefined) {
109
+ return;
110
+ }
111
+ if (typeof value === 'object' && !Array.isArray(value)) {
112
+ flattenObjectBracket(value, newKey, result, encodeValue);
113
+ }
114
+ else if (Array.isArray(value)) {
115
+ result.push([newKey, encodeValue(value.join(','))]);
116
+ }
117
+ else {
118
+ result.push([newKey, encodeValue(String(value))]);
119
+ }
120
+ });
121
+ }
122
+ /**
123
+ * Converts parsed URL parameters back to a URLSearchParams object
124
+ * @param params - The parsed parameters as key-value pairs
125
+ * @returns URLSearchParams object
126
+ */
127
+ export function createUrlSearchParams(params) {
128
+ const searchParams = new URLSearchParams();
129
+ params.forEach(([key, value]) => {
130
+ searchParams.append(key, value);
131
+ });
132
+ return searchParams;
133
+ }
134
+ /**
135
+ * Convenience function that combines parseUrlParams and createUrlSearchParams
136
+ * @param params - The parameter object to convert
137
+ * @param options - Options for serialization
138
+ * @returns URLSearchParams object
139
+ */
140
+ export function paramsToUrlSearchParams(params, options) {
141
+ // Force encode: false because URLSearchParams.toString() handles encoding.
142
+ // Pre-encoding here would cause double-encoding (e.g. space → %20 → %2520).
143
+ const parsedParams = parseUrlParams(params, { ...options, encode: false });
144
+ return createUrlSearchParams(parsedParams);
145
+ }
146
+ //# sourceMappingURL=urlParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlParams.js","sourceRoot":"","sources":["../../src/utils/urlParams.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,MAAM,UAAU,cAAc,CAC5B,MAA2B,EAC3B,UAA4B,EAAE;IAE9B,MAAM,EACJ,WAAW,GAAG,QAAQ,EAAE,sDAAsD;IAC9E,YAAY,GAAG,SAAS,EAAE,mDAAmD;IAC7E,MAAM,GAAG,IAAI,CAAC,uCAAuC;MACtD,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE;QAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAU,EAAQ,EAAE;QACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,6BAA6B;QACvC,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,0CAA0C;gBAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtC,kDAAkD;gBAClD,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC;gBAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,0CAA0C;gBAC1C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACjC,mCAAmC;YACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;gBAC5B,4BAA4B;gBAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;gBAClC,sCAAsC;gBACtC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtC,0CAA0C;gBAC1C,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,GAAwB,EACxB,MAAc,EACd,MAA+B,EAC/B,WAAsC;IAEtC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;QAElC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,GAAwB,EACxB,MAAc,EACd,MAA+B,EAC/B,WAAsC;IAEtC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,CAAC;QAEnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA+B;IACnE,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;IAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9B,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA2B,EAC3B,OAA0B;IAE1B,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SDK Version Information
3
+ * AUTO-GENERATED by scripts/generate-version-info.cjs - DO NOT EDIT MANUALLY
4
+ */
5
+ export interface SDKVersionInfo {
6
+ /** The release number for a published build; `<package.json version>+<source hash>` for any other build. */
7
+ version: string;
8
+ buildTimestamp: string;
9
+ buildHash: string;
10
+ gitCommit: string;
11
+ /** The build included uncommitted SDK changes. */
12
+ dirty: boolean;
13
+ }
14
+ export declare const SDK_VERSION: SDKVersionInfo;
15
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,4GAA4G;IAC5G,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,WAAW,EAAE,cAMzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SDK Version Information
3
+ * AUTO-GENERATED by scripts/generate-version-info.cjs - DO NOT EDIT MANUALLY
4
+ */
5
+ export const SDK_VERSION = {
6
+ version: '1.4.1',
7
+ buildTimestamp: '2026-10-10T06:58:40.258Z',
8
+ buildHash: 'f6505e2eb9725dc8d239bb401ced8f88',
9
+ gitCommit: '1c00e18',
10
+ dirty: false,
11
+ };
12
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,OAAO,EAAE,OAAO;IAChB,cAAc,EAAE,0BAA0B;IAC1C,SAAS,EAAE,kCAAkC;IAC7C,SAAS,EAAE,SAAS;IACpB,KAAK,EAAE,KAAK;CACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,90 @@
1
1
  {
2
2
  "name": "@nurama/sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.4.1",
4
+ "description": "Provides API, web-socket, and additional utilities for interfacing with the Nurama platform.",
5
+ "main": "dist/NuramaClient.js",
6
+ "module": "dist/NuramaClient.js",
7
+ "browser": "dist/browser/nurama-sdk.js",
8
+ "types": "dist/NuramaClient.d.ts",
9
+ "type": "module",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/NuramaClient.d.ts",
13
+ "import": "./dist/NuramaClient.js",
14
+ "require": "./dist/NuramaClient.js"
15
+ },
16
+ "./bot": {
17
+ "types": "./dist/BotClient.d.ts",
18
+ "import": "./dist/BotClient.js",
19
+ "require": "./dist/BotClient.js"
20
+ },
21
+ "./browser": "./dist/browser/nurama-sdk.js",
22
+ "./browser-min": "./dist/browser/nurama-sdk.min.js",
23
+ "./bot-browser": "./dist/browser/nurama-bot-sdk.js",
24
+ "./bot-browser-min": "./dist/browser/nurama-bot-sdk.min.js"
25
+ },
26
+ "keywords": [
27
+ "api",
28
+ "sdk",
29
+ "nurama"
30
+ ],
31
+ "author": "Nurama Team",
32
+ "license": "Apache-2.0",
33
+ "dependencies": {
34
+ "jwt-decode": "^4.0.0",
35
+ "socket.io-client": "^4.7.2",
36
+ "@nurama/types": "1.4.1"
37
+ },
38
+ "devDependencies": {
39
+ "@types/jest": "^29.5.14",
40
+ "@types/jwt-decode": "^2.2.1",
41
+ "@types/node": "^22.14.1",
42
+ "@types/socket.io-client": "^1.4.36",
43
+ "@typescript-eslint/eslint-plugin": "^6.18.0",
44
+ "@typescript-eslint/parser": "^6.18.0",
45
+ "dotenv": "^16.3.1",
46
+ "esbuild": "^0.21.5",
47
+ "eslint": "^8.56.0",
48
+ "jest": "^29.7.0",
49
+ "shx": "^0.3.4",
50
+ "ts-jest": "^29.3.4",
51
+ "tslib": "^2.8.1",
52
+ "typedoc": "^0.28.20",
53
+ "typedoc-plugin-markdown": "^4.13.1",
54
+ "typescript": "^5.8.3",
55
+ "typescript-eslint": "^8.32.0"
56
+ },
57
+ "files": [
58
+ "dist",
59
+ "src",
60
+ "README.md",
61
+ "LICENSE",
62
+ "NOTICE"
63
+ ],
64
+ "publishConfig": {
65
+ "access": "public"
66
+ },
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/nurama-team/nurama.git",
70
+ "directory": "packages/sdk"
71
+ },
72
+ "scripts": {
73
+ "test": "jest",
74
+ "test:watch": "jest --watch",
75
+ "test:coverage": "jest --coverage",
76
+ "dev": "node scripts/dev.cjs",
77
+ "gen:version": "node scripts/generate-version-info.cjs",
78
+ "prebuild": "pnpm gen:version",
79
+ "build:tsc": "tsc",
80
+ "build:browser": "esbuild src/browser-entry.js --bundle --outfile=dist/browser/nurama-sdk.js --format=iife --platform=browser",
81
+ "build:browser-min": "esbuild src/browser-entry.js --bundle --minify --outfile=dist/browser/nurama-sdk.min.js --format=iife --platform=browser",
82
+ "build:bot": "pnpm gen:version && esbuild src/bot-browser-entry.js --bundle --outfile=dist/browser/nurama-bot-sdk.js --format=iife --platform=browser",
83
+ "build:bot-min": "pnpm gen:version && esbuild src/bot-browser-entry.js --bundle --minify --outfile=dist/browser/nurama-bot-sdk.min.js --format=iife --platform=browser",
84
+ "copy:examples": "shx mkdir -p examples/example-html && shx cp dist/browser/nurama-sdk.min.js examples/example-html/",
85
+ "build": "pnpm build:tsc && pnpm build:browser && pnpm build:browser-min && pnpm build:bot && pnpm build:bot-min && pnpm copy:examples",
86
+ "lint": "eslint .",
87
+ "lint:main": "eslint --ignore-pattern 'example-react/**' --ext .js,.jsx,.ts,.tsx .",
88
+ "docs:typedoc": "pnpm gen:version && typedoc"
89
+ }
6
90
  }