@bota-dev/react-native-sdk 0.0.2

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 (177) hide show
  1. package/README.md +279 -0
  2. package/lib/commonjs/BotaClient.js +223 -0
  3. package/lib/commonjs/BotaClient.js.map +1 -0
  4. package/lib/commonjs/ble/BleManager.js +494 -0
  5. package/lib/commonjs/ble/BleManager.js.map +1 -0
  6. package/lib/commonjs/ble/constants.js +166 -0
  7. package/lib/commonjs/ble/constants.js.map +1 -0
  8. package/lib/commonjs/ble/index.js +54 -0
  9. package/lib/commonjs/ble/index.js.map +1 -0
  10. package/lib/commonjs/ble/parsers.js +345 -0
  11. package/lib/commonjs/ble/parsers.js.map +1 -0
  12. package/lib/commonjs/index.js +81 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/managers/DeviceManager.js +437 -0
  15. package/lib/commonjs/managers/DeviceManager.js.map +1 -0
  16. package/lib/commonjs/managers/OTAManager.js +227 -0
  17. package/lib/commonjs/managers/OTAManager.js.map +1 -0
  18. package/lib/commonjs/managers/RecordingManager.js +384 -0
  19. package/lib/commonjs/managers/RecordingManager.js.map +1 -0
  20. package/lib/commonjs/managers/index.js +27 -0
  21. package/lib/commonjs/managers/index.js.map +1 -0
  22. package/lib/commonjs/models/Device.js +2 -0
  23. package/lib/commonjs/models/Device.js.map +1 -0
  24. package/lib/commonjs/models/Recording.js +2 -0
  25. package/lib/commonjs/models/Recording.js.map +1 -0
  26. package/lib/commonjs/models/Status.js +6 -0
  27. package/lib/commonjs/models/Status.js.map +1 -0
  28. package/lib/commonjs/models/index.js +39 -0
  29. package/lib/commonjs/models/index.js.map +1 -0
  30. package/lib/commonjs/protocol/ProtocolHandler.js +343 -0
  31. package/lib/commonjs/protocol/ProtocolHandler.js.map +1 -0
  32. package/lib/commonjs/protocol/index.js +13 -0
  33. package/lib/commonjs/protocol/index.js.map +1 -0
  34. package/lib/commonjs/storage/StorageManager.js +333 -0
  35. package/lib/commonjs/storage/StorageManager.js.map +1 -0
  36. package/lib/commonjs/storage/index.js +19 -0
  37. package/lib/commonjs/storage/index.js.map +1 -0
  38. package/lib/commonjs/upload/S3Uploader.js +133 -0
  39. package/lib/commonjs/upload/S3Uploader.js.map +1 -0
  40. package/lib/commonjs/upload/UploadQueue.js +280 -0
  41. package/lib/commonjs/upload/UploadQueue.js.map +1 -0
  42. package/lib/commonjs/upload/index.js +20 -0
  43. package/lib/commonjs/upload/index.js.map +1 -0
  44. package/lib/commonjs/utils/errors.js +187 -0
  45. package/lib/commonjs/utils/errors.js.map +1 -0
  46. package/lib/commonjs/utils/index.js +40 -0
  47. package/lib/commonjs/utils/index.js.map +1 -0
  48. package/lib/commonjs/utils/logger.js +135 -0
  49. package/lib/commonjs/utils/logger.js.map +1 -0
  50. package/lib/commonjs/utils/retry.js +160 -0
  51. package/lib/commonjs/utils/retry.js.map +1 -0
  52. package/lib/module/BotaClient.js +216 -0
  53. package/lib/module/BotaClient.js.map +1 -0
  54. package/lib/module/ble/BleManager.js +484 -0
  55. package/lib/module/ble/BleManager.js.map +1 -0
  56. package/lib/module/ble/constants.js +159 -0
  57. package/lib/module/ble/constants.js.map +1 -0
  58. package/lib/module/ble/index.js +8 -0
  59. package/lib/module/ble/index.js.map +1 -0
  60. package/lib/module/ble/parsers.js +328 -0
  61. package/lib/module/ble/parsers.js.map +1 -0
  62. package/lib/module/index.js +22 -0
  63. package/lib/module/index.js.map +1 -0
  64. package/lib/module/managers/DeviceManager.js +429 -0
  65. package/lib/module/managers/DeviceManager.js.map +1 -0
  66. package/lib/module/managers/OTAManager.js +219 -0
  67. package/lib/module/managers/OTAManager.js.map +1 -0
  68. package/lib/module/managers/RecordingManager.js +376 -0
  69. package/lib/module/managers/RecordingManager.js.map +1 -0
  70. package/lib/module/managers/index.js +8 -0
  71. package/lib/module/managers/index.js.map +1 -0
  72. package/lib/module/models/Device.js +2 -0
  73. package/lib/module/models/Device.js.map +1 -0
  74. package/lib/module/models/Recording.js +2 -0
  75. package/lib/module/models/Recording.js.map +1 -0
  76. package/lib/module/models/Status.js +2 -0
  77. package/lib/module/models/Status.js.map +1 -0
  78. package/lib/module/models/index.js +8 -0
  79. package/lib/module/models/index.js.map +1 -0
  80. package/lib/module/protocol/ProtocolHandler.js +336 -0
  81. package/lib/module/protocol/ProtocolHandler.js.map +1 -0
  82. package/lib/module/protocol/index.js +6 -0
  83. package/lib/module/protocol/index.js.map +1 -0
  84. package/lib/module/storage/StorageManager.js +324 -0
  85. package/lib/module/storage/StorageManager.js.map +1 -0
  86. package/lib/module/storage/index.js +6 -0
  87. package/lib/module/storage/index.js.map +1 -0
  88. package/lib/module/upload/S3Uploader.js +126 -0
  89. package/lib/module/upload/S3Uploader.js.map +1 -0
  90. package/lib/module/upload/UploadQueue.js +272 -0
  91. package/lib/module/upload/UploadQueue.js.map +1 -0
  92. package/lib/module/upload/index.js +7 -0
  93. package/lib/module/upload/index.js.map +1 -0
  94. package/lib/module/utils/errors.js +173 -0
  95. package/lib/module/utils/errors.js.map +1 -0
  96. package/lib/module/utils/index.js +8 -0
  97. package/lib/module/utils/index.js.map +1 -0
  98. package/lib/module/utils/logger.js +129 -0
  99. package/lib/module/utils/logger.js.map +1 -0
  100. package/lib/module/utils/retry.js +149 -0
  101. package/lib/module/utils/retry.js.map +1 -0
  102. package/lib/typescript/src/BotaClient.d.ts +77 -0
  103. package/lib/typescript/src/BotaClient.d.ts.map +1 -0
  104. package/lib/typescript/src/ble/BleManager.d.ts +111 -0
  105. package/lib/typescript/src/ble/BleManager.d.ts.map +1 -0
  106. package/lib/typescript/src/ble/constants.d.ts +111 -0
  107. package/lib/typescript/src/ble/constants.d.ts.map +1 -0
  108. package/lib/typescript/src/ble/index.d.ts +7 -0
  109. package/lib/typescript/src/ble/index.d.ts.map +1 -0
  110. package/lib/typescript/src/ble/parsers.d.ts +100 -0
  111. package/lib/typescript/src/ble/parsers.d.ts.map +1 -0
  112. package/lib/typescript/src/index.d.ts +16 -0
  113. package/lib/typescript/src/index.d.ts.map +1 -0
  114. package/lib/typescript/src/managers/DeviceManager.d.ts +84 -0
  115. package/lib/typescript/src/managers/DeviceManager.d.ts.map +1 -0
  116. package/lib/typescript/src/managers/OTAManager.d.ts +78 -0
  117. package/lib/typescript/src/managers/OTAManager.d.ts.map +1 -0
  118. package/lib/typescript/src/managers/RecordingManager.d.ts +90 -0
  119. package/lib/typescript/src/managers/RecordingManager.d.ts.map +1 -0
  120. package/lib/typescript/src/managers/index.d.ts +7 -0
  121. package/lib/typescript/src/managers/index.d.ts.map +1 -0
  122. package/lib/typescript/src/models/Device.d.ts +139 -0
  123. package/lib/typescript/src/models/Device.d.ts.map +1 -0
  124. package/lib/typescript/src/models/Recording.d.ts +110 -0
  125. package/lib/typescript/src/models/Recording.d.ts.map +1 -0
  126. package/lib/typescript/src/models/Status.d.ts +104 -0
  127. package/lib/typescript/src/models/Status.d.ts.map +1 -0
  128. package/lib/typescript/src/models/index.d.ts +7 -0
  129. package/lib/typescript/src/models/index.d.ts.map +1 -0
  130. package/lib/typescript/src/protocol/ProtocolHandler.d.ts +69 -0
  131. package/lib/typescript/src/protocol/ProtocolHandler.d.ts.map +1 -0
  132. package/lib/typescript/src/protocol/index.d.ts +5 -0
  133. package/lib/typescript/src/protocol/index.d.ts.map +1 -0
  134. package/lib/typescript/src/storage/StorageManager.d.ts +116 -0
  135. package/lib/typescript/src/storage/StorageManager.d.ts.map +1 -0
  136. package/lib/typescript/src/storage/index.d.ts +5 -0
  137. package/lib/typescript/src/storage/index.d.ts.map +1 -0
  138. package/lib/typescript/src/upload/S3Uploader.d.ts +38 -0
  139. package/lib/typescript/src/upload/S3Uploader.d.ts.map +1 -0
  140. package/lib/typescript/src/upload/UploadQueue.d.ts +95 -0
  141. package/lib/typescript/src/upload/UploadQueue.d.ts.map +1 -0
  142. package/lib/typescript/src/upload/index.d.ts +6 -0
  143. package/lib/typescript/src/upload/index.d.ts.map +1 -0
  144. package/lib/typescript/src/utils/errors.d.ts +82 -0
  145. package/lib/typescript/src/utils/errors.d.ts.map +1 -0
  146. package/lib/typescript/src/utils/index.d.ts +7 -0
  147. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  148. package/lib/typescript/src/utils/logger.d.ts +68 -0
  149. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  150. package/lib/typescript/src/utils/retry.d.ts +53 -0
  151. package/lib/typescript/src/utils/retry.d.ts.map +1 -0
  152. package/package.json +95 -0
  153. package/src/BotaClient.ts +238 -0
  154. package/src/ble/BleManager.ts +573 -0
  155. package/src/ble/constants.ts +158 -0
  156. package/src/ble/index.ts +7 -0
  157. package/src/ble/parsers.ts +395 -0
  158. package/src/index.ts +64 -0
  159. package/src/managers/DeviceManager.ts +545 -0
  160. package/src/managers/OTAManager.ts +263 -0
  161. package/src/managers/RecordingManager.ts +434 -0
  162. package/src/managers/index.ts +12 -0
  163. package/src/models/Device.ts +164 -0
  164. package/src/models/Recording.ts +123 -0
  165. package/src/models/Status.ts +126 -0
  166. package/src/models/index.ts +7 -0
  167. package/src/protocol/ProtocolHandler.ts +459 -0
  168. package/src/protocol/index.ts +5 -0
  169. package/src/storage/StorageManager.ts +343 -0
  170. package/src/storage/index.ts +5 -0
  171. package/src/upload/S3Uploader.ts +164 -0
  172. package/src/upload/UploadQueue.ts +310 -0
  173. package/src/upload/index.ts +6 -0
  174. package/src/utils/errors.ts +310 -0
  175. package/src/utils/index.ts +7 -0
  176. package/src/utils/logger.ts +137 -0
  177. package/src/utils/retry.ts +177 -0
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StorageManager = void 0;
7
+ exports.generateTaskId = generateTaskId;
8
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
9
+ var _buffer = require("buffer");
10
+ var _logger = require("../utils/logger");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ /**
13
+ * Storage Manager - Local persistence for recordings and upload queue
14
+ */
15
+
16
+ const log = _logger.logger.tag('StorageManager');
17
+
18
+ // Storage keys
19
+ const STORAGE_PREFIX = '@bota_sdk:';
20
+ const UPLOAD_QUEUE_KEY = `${STORAGE_PREFIX}upload_queue`;
21
+ const SDK_STATE_KEY = `${STORAGE_PREFIX}sdk_state`;
22
+
23
+ /**
24
+ * SDK persistent state
25
+ */
26
+
27
+ /**
28
+ * Storage Manager class
29
+ */
30
+ class StorageManager {
31
+ uploadQueue = [];
32
+ sdkState = {
33
+ lastSyncTimes: {},
34
+ deviceInfo: {}
35
+ };
36
+ isInitialized = false;
37
+
38
+ /**
39
+ * Initialize storage manager
40
+ */
41
+ async initialize() {
42
+ if (this.isInitialized) {
43
+ return;
44
+ }
45
+ log.debug('Initializing StorageManager');
46
+ try {
47
+ // Load upload queue
48
+ const queueData = await _asyncStorage.default.getItem(UPLOAD_QUEUE_KEY);
49
+ if (queueData) {
50
+ this.uploadQueue = JSON.parse(queueData);
51
+ // Restore dates
52
+ this.uploadQueue = this.uploadQueue.map(task => ({
53
+ ...task,
54
+ createdAt: new Date(task.createdAt),
55
+ updatedAt: new Date(task.updatedAt)
56
+ }));
57
+ }
58
+
59
+ // Load SDK state
60
+ const stateData = await _asyncStorage.default.getItem(SDK_STATE_KEY);
61
+ if (stateData) {
62
+ this.sdkState = JSON.parse(stateData);
63
+ }
64
+ this.isInitialized = true;
65
+ log.info('StorageManager initialized', {
66
+ pendingUploads: this.uploadQueue.length
67
+ });
68
+ } catch (error) {
69
+ log.error('Failed to initialize storage', error);
70
+ // Continue with empty state
71
+ this.isInitialized = true;
72
+ }
73
+ }
74
+
75
+ // Upload Queue Methods
76
+
77
+ /**
78
+ * Get all upload tasks
79
+ */
80
+ getUploadQueue() {
81
+ return [...this.uploadQueue];
82
+ }
83
+
84
+ /**
85
+ * Get pending upload tasks
86
+ */
87
+ getPendingUploads() {
88
+ return this.uploadQueue.filter(task => task.status === 'pending' || task.status === 'uploading');
89
+ }
90
+
91
+ /**
92
+ * Get failed upload tasks
93
+ */
94
+ getFailedUploads() {
95
+ return this.uploadQueue.filter(task => task.status === 'failed');
96
+ }
97
+
98
+ /**
99
+ * Add a task to the upload queue
100
+ */
101
+ async addUploadTask(task) {
102
+ log.debug('Adding upload task', {
103
+ taskId: task.id,
104
+ recordingId: task.recordingId
105
+ });
106
+ this.uploadQueue.push(task);
107
+ await this.saveUploadQueue();
108
+ }
109
+
110
+ /**
111
+ * Update an upload task
112
+ */
113
+ async updateUploadTask(taskId, updates) {
114
+ const index = this.uploadQueue.findIndex(t => t.id === taskId);
115
+ if (index === -1) {
116
+ log.warn('Upload task not found', {
117
+ taskId
118
+ });
119
+ return;
120
+ }
121
+ this.uploadQueue[index] = {
122
+ ...this.uploadQueue[index],
123
+ ...updates,
124
+ updatedAt: new Date()
125
+ };
126
+ await this.saveUploadQueue();
127
+ }
128
+
129
+ /**
130
+ * Update task status
131
+ */
132
+ async updateTaskStatus(taskId, status, errorMessage) {
133
+ await this.updateUploadTask(taskId, {
134
+ status,
135
+ errorMessage
136
+ });
137
+ }
138
+
139
+ /**
140
+ * Increment retry count for a task
141
+ */
142
+ async incrementRetryCount(taskId) {
143
+ const task = this.uploadQueue.find(t => t.id === taskId);
144
+ if (task) {
145
+ await this.updateUploadTask(taskId, {
146
+ retryCount: task.retryCount + 1
147
+ });
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Remove a task from the queue
153
+ */
154
+ async removeUploadTask(taskId) {
155
+ log.debug('Removing upload task', {
156
+ taskId
157
+ });
158
+ this.uploadQueue = this.uploadQueue.filter(t => t.id !== taskId);
159
+ await this.saveUploadQueue();
160
+ }
161
+
162
+ /**
163
+ * Clear all completed tasks
164
+ */
165
+ async clearCompletedTasks() {
166
+ this.uploadQueue = this.uploadQueue.filter(t => t.status !== 'completed');
167
+ await this.saveUploadQueue();
168
+ }
169
+
170
+ /**
171
+ * Clear all tasks
172
+ */
173
+ async clearAllTasks() {
174
+ this.uploadQueue = [];
175
+ await this.saveUploadQueue();
176
+ }
177
+
178
+ /**
179
+ * Get a specific upload task
180
+ */
181
+ getUploadTask(taskId) {
182
+ return this.uploadQueue.find(t => t.id === taskId);
183
+ }
184
+
185
+ /**
186
+ * Save upload queue to storage
187
+ */
188
+ async saveUploadQueue() {
189
+ try {
190
+ await _asyncStorage.default.setItem(UPLOAD_QUEUE_KEY, JSON.stringify(this.uploadQueue));
191
+ } catch (error) {
192
+ log.error('Failed to save upload queue', error);
193
+ }
194
+ }
195
+
196
+ // SDK State Methods
197
+
198
+ /**
199
+ * Get last sync time for a device
200
+ */
201
+ getLastSyncTime(deviceId) {
202
+ const timestamp = this.sdkState.lastSyncTimes[deviceId];
203
+ return timestamp ? new Date(timestamp) : null;
204
+ }
205
+
206
+ /**
207
+ * Set last sync time for a device
208
+ */
209
+ async setLastSyncTime(deviceId, time = new Date()) {
210
+ this.sdkState.lastSyncTimes[deviceId] = time.getTime();
211
+ await this.saveSdkState();
212
+ }
213
+
214
+ /**
215
+ * Get cached device info
216
+ */
217
+ getDeviceInfo(deviceId) {
218
+ return this.sdkState.deviceInfo[deviceId];
219
+ }
220
+
221
+ /**
222
+ * Cache device info
223
+ */
224
+ async setDeviceInfo(deviceId, info) {
225
+ this.sdkState.deviceInfo[deviceId] = info;
226
+ await this.saveSdkState();
227
+ }
228
+
229
+ /**
230
+ * Save SDK state to storage
231
+ */
232
+ async saveSdkState() {
233
+ try {
234
+ await _asyncStorage.default.setItem(SDK_STATE_KEY, JSON.stringify(this.sdkState));
235
+ } catch (error) {
236
+ log.error('Failed to save SDK state', error);
237
+ }
238
+ }
239
+
240
+ // Recording File Methods
241
+ // Note: For actual file storage, we'd need react-native-fs or similar
242
+ // For now, we'll store base64 encoded audio in AsyncStorage for small files
243
+
244
+ /**
245
+ * Save recording data locally
246
+ */
247
+ async saveRecordingData(deviceId, recordingUuid, data) {
248
+ const key = `${STORAGE_PREFIX}recording:${deviceId}:${recordingUuid}`;
249
+ try {
250
+ // Store as base64 (not ideal for large files, but works for demo)
251
+ await _asyncStorage.default.setItem(key, data.toString('base64'));
252
+ log.debug('Saved recording data', {
253
+ deviceId,
254
+ recordingUuid,
255
+ size: data.length
256
+ });
257
+ return key;
258
+ } catch (error) {
259
+ log.error('Failed to save recording data', error);
260
+ throw error;
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Load recording data
266
+ */
267
+ async loadRecordingData(localPath) {
268
+ try {
269
+ const data = await _asyncStorage.default.getItem(localPath);
270
+ if (!data) {
271
+ throw new Error(`Recording not found: ${localPath}`);
272
+ }
273
+ return _buffer.Buffer.from(data, 'base64');
274
+ } catch (error) {
275
+ log.error('Failed to load recording data', error);
276
+ throw error;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Delete recording data
282
+ */
283
+ async deleteRecordingData(localPath) {
284
+ try {
285
+ await _asyncStorage.default.removeItem(localPath);
286
+ log.debug('Deleted recording data', {
287
+ localPath
288
+ });
289
+ } catch (error) {
290
+ log.error('Failed to delete recording data', error);
291
+ }
292
+ }
293
+
294
+ /**
295
+ * Clear all SDK storage
296
+ */
297
+ async clearAll() {
298
+ log.info('Clearing all SDK storage');
299
+ try {
300
+ const keys = await _asyncStorage.default.getAllKeys();
301
+ const botaKeys = keys.filter(k => k.startsWith(STORAGE_PREFIX));
302
+ await _asyncStorage.default.multiRemove(botaKeys);
303
+ this.uploadQueue = [];
304
+ this.sdkState = {
305
+ lastSyncTimes: {},
306
+ deviceInfo: {}
307
+ };
308
+ } catch (error) {
309
+ log.error('Failed to clear storage', error);
310
+ }
311
+ }
312
+
313
+ /**
314
+ * Clean up resources
315
+ */
316
+ destroy() {
317
+ this.uploadQueue = [];
318
+ this.sdkState = {
319
+ lastSyncTimes: {},
320
+ deviceInfo: {}
321
+ };
322
+ this.isInitialized = false;
323
+ }
324
+ }
325
+
326
+ /**
327
+ * Generate a unique task ID
328
+ */
329
+ exports.StorageManager = StorageManager;
330
+ function generateTaskId() {
331
+ return `task_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
332
+ }
333
+ //# sourceMappingURL=StorageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncStorage","_interopRequireDefault","require","_buffer","_logger","e","__esModule","default","log","logger","tag","STORAGE_PREFIX","UPLOAD_QUEUE_KEY","SDK_STATE_KEY","StorageManager","uploadQueue","sdkState","lastSyncTimes","deviceInfo","isInitialized","initialize","debug","queueData","AsyncStorage","getItem","JSON","parse","map","task","createdAt","Date","updatedAt","stateData","info","pendingUploads","length","error","getUploadQueue","getPendingUploads","filter","status","getFailedUploads","addUploadTask","taskId","id","recordingId","push","saveUploadQueue","updateUploadTask","updates","index","findIndex","t","warn","updateTaskStatus","errorMessage","incrementRetryCount","find","retryCount","removeUploadTask","clearCompletedTasks","clearAllTasks","getUploadTask","setItem","stringify","getLastSyncTime","deviceId","timestamp","setLastSyncTime","time","getTime","saveSdkState","getDeviceInfo","setDeviceInfo","saveRecordingData","recordingUuid","data","key","toString","size","loadRecordingData","localPath","Error","Buffer","from","deleteRecordingData","removeItem","clearAll","keys","getAllKeys","botaKeys","k","startsWith","multiRemove","destroy","exports","generateTaskId","now","Math","random","substring"],"sourceRoot":"../../../src","sources":["storage/StorageManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "StorageManager", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _StorageManager.StorageManager;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "generateTaskId", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _StorageManager.generateTaskId;
16
+ }
17
+ });
18
+ var _StorageManager = require("./StorageManager");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_StorageManager","require"],"sourceRoot":"../../../src","sources":["storage/index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAIA,IAAAA,eAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.S3Uploader = void 0;
7
+ var _errors = require("../utils/errors");
8
+ var _logger = require("../utils/logger");
9
+ /**
10
+ * S3 Uploader - Handles uploading audio files to S3 using pre-signed URLs
11
+ */
12
+
13
+ const log = _logger.logger.tag('S3Uploader');
14
+
15
+ /**
16
+ * Upload progress callback
17
+ */
18
+
19
+ /**
20
+ * Upload options
21
+ */
22
+
23
+ /**
24
+ * S3 Uploader class
25
+ */
26
+ class S3Uploader {
27
+ /**
28
+ * Upload a file to S3 using a pre-signed URL
29
+ */
30
+ async upload(data, uploadUrl, options = {}) {
31
+ const {
32
+ contentType = 'audio/opus',
33
+ onProgress,
34
+ abortSignal
35
+ } = options;
36
+ log.info('Starting S3 upload', {
37
+ size: data.length,
38
+ contentType
39
+ });
40
+ try {
41
+ // For React Native, we use fetch with the PUT method
42
+ const response = await fetch(uploadUrl, {
43
+ method: 'PUT',
44
+ headers: {
45
+ 'Content-Type': contentType,
46
+ 'Content-Length': data.length.toString()
47
+ },
48
+ body: data,
49
+ signal: abortSignal
50
+ });
51
+ if (!response.ok) {
52
+ const errorText = await response.text().catch(() => 'Unknown error');
53
+ log.error('S3 upload failed', undefined, {
54
+ status: response.status,
55
+ statusText: response.statusText,
56
+ error: errorText
57
+ });
58
+ if (response.status === 403) {
59
+ throw _errors.UploadError.urlExpired('');
60
+ }
61
+ throw new _errors.UploadError(`S3 upload failed: ${response.status} ${response.statusText}`, 'S3_UPLOAD_FAILED');
62
+ }
63
+
64
+ // Report completion
65
+ onProgress?.(1.0);
66
+ log.info('S3 upload completed', {
67
+ size: data.length
68
+ });
69
+ } catch (error) {
70
+ if (error instanceof _errors.UploadError) {
71
+ throw error;
72
+ }
73
+ const err = error;
74
+
75
+ // Check for abort
76
+ if (err.name === 'AbortError') {
77
+ throw new _errors.UploadError('Upload was cancelled', 'UPLOAD_CANCELLED');
78
+ }
79
+
80
+ // Check for network errors
81
+ if (err.message?.includes('Network request failed')) {
82
+ throw _errors.UploadError.networkUnavailable();
83
+ }
84
+ throw new _errors.UploadError(`Upload failed: ${err.message}`, 'UPLOAD_FAILED', undefined, err);
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Upload a file in chunks (for larger files)
90
+ * Note: This requires multipart upload support from the pre-signed URL
91
+ */
92
+ async uploadChunked(data, uploadUrl, options = {}) {
93
+ // For now, delegate to simple upload
94
+ // In production, you'd implement S3 multipart upload here
95
+ return this.upload(data, uploadUrl, options);
96
+ }
97
+
98
+ /**
99
+ * Notify the backend that upload is complete
100
+ */
101
+ async notifyCompletion(completeUrl, recordingId, uploadToken) {
102
+ log.debug('Notifying upload completion', {
103
+ recordingId
104
+ });
105
+ try {
106
+ const response = await fetch(completeUrl, {
107
+ method: 'POST',
108
+ headers: {
109
+ 'Content-Type': 'application/json',
110
+ Authorization: `Bearer ${uploadToken}`
111
+ },
112
+ body: JSON.stringify({
113
+ recording_id: recordingId
114
+ })
115
+ });
116
+ if (!response.ok) {
117
+ const errorText = await response.text().catch(() => 'Unknown error');
118
+ throw new _errors.UploadError(`Completion notification failed: ${response.status} - ${errorText}`, 'COMPLETION_FAILED');
119
+ }
120
+ log.info('Upload completion notified', {
121
+ recordingId
122
+ });
123
+ } catch (error) {
124
+ if (error instanceof _errors.UploadError) {
125
+ throw error;
126
+ }
127
+ const err = error;
128
+ throw _errors.UploadError.completionFailed('', err);
129
+ }
130
+ }
131
+ }
132
+ exports.S3Uploader = S3Uploader;
133
+ //# sourceMappingURL=S3Uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_errors","require","_logger","log","logger","tag","S3Uploader","upload","data","uploadUrl","options","contentType","onProgress","abortSignal","info","size","length","response","fetch","method","headers","toString","body","signal","ok","errorText","text","catch","error","undefined","status","statusText","UploadError","urlExpired","err","name","message","includes","networkUnavailable","uploadChunked","notifyCompletion","completeUrl","recordingId","uploadToken","debug","Authorization","JSON","stringify","recording_id","completionFailed","exports"],"sourceRoot":"../../../src","sources":["upload/S3Uploader.ts"],"mappings":"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","ignoreList":[]}