@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.
- package/README.md +279 -0
- package/lib/commonjs/BotaClient.js +223 -0
- package/lib/commonjs/BotaClient.js.map +1 -0
- package/lib/commonjs/ble/BleManager.js +494 -0
- package/lib/commonjs/ble/BleManager.js.map +1 -0
- package/lib/commonjs/ble/constants.js +166 -0
- package/lib/commonjs/ble/constants.js.map +1 -0
- package/lib/commonjs/ble/index.js +54 -0
- package/lib/commonjs/ble/index.js.map +1 -0
- package/lib/commonjs/ble/parsers.js +345 -0
- package/lib/commonjs/ble/parsers.js.map +1 -0
- package/lib/commonjs/index.js +81 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/managers/DeviceManager.js +437 -0
- package/lib/commonjs/managers/DeviceManager.js.map +1 -0
- package/lib/commonjs/managers/OTAManager.js +227 -0
- package/lib/commonjs/managers/OTAManager.js.map +1 -0
- package/lib/commonjs/managers/RecordingManager.js +384 -0
- package/lib/commonjs/managers/RecordingManager.js.map +1 -0
- package/lib/commonjs/managers/index.js +27 -0
- package/lib/commonjs/managers/index.js.map +1 -0
- package/lib/commonjs/models/Device.js +2 -0
- package/lib/commonjs/models/Device.js.map +1 -0
- package/lib/commonjs/models/Recording.js +2 -0
- package/lib/commonjs/models/Recording.js.map +1 -0
- package/lib/commonjs/models/Status.js +6 -0
- package/lib/commonjs/models/Status.js.map +1 -0
- package/lib/commonjs/models/index.js +39 -0
- package/lib/commonjs/models/index.js.map +1 -0
- package/lib/commonjs/protocol/ProtocolHandler.js +343 -0
- package/lib/commonjs/protocol/ProtocolHandler.js.map +1 -0
- package/lib/commonjs/protocol/index.js +13 -0
- package/lib/commonjs/protocol/index.js.map +1 -0
- package/lib/commonjs/storage/StorageManager.js +333 -0
- package/lib/commonjs/storage/StorageManager.js.map +1 -0
- package/lib/commonjs/storage/index.js +19 -0
- package/lib/commonjs/storage/index.js.map +1 -0
- package/lib/commonjs/upload/S3Uploader.js +133 -0
- package/lib/commonjs/upload/S3Uploader.js.map +1 -0
- package/lib/commonjs/upload/UploadQueue.js +280 -0
- package/lib/commonjs/upload/UploadQueue.js.map +1 -0
- package/lib/commonjs/upload/index.js +20 -0
- package/lib/commonjs/upload/index.js.map +1 -0
- package/lib/commonjs/utils/errors.js +187 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/index.js +40 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/logger.js +135 -0
- package/lib/commonjs/utils/logger.js.map +1 -0
- package/lib/commonjs/utils/retry.js +160 -0
- package/lib/commonjs/utils/retry.js.map +1 -0
- package/lib/module/BotaClient.js +216 -0
- package/lib/module/BotaClient.js.map +1 -0
- package/lib/module/ble/BleManager.js +484 -0
- package/lib/module/ble/BleManager.js.map +1 -0
- package/lib/module/ble/constants.js +159 -0
- package/lib/module/ble/constants.js.map +1 -0
- package/lib/module/ble/index.js +8 -0
- package/lib/module/ble/index.js.map +1 -0
- package/lib/module/ble/parsers.js +328 -0
- package/lib/module/ble/parsers.js.map +1 -0
- package/lib/module/index.js +22 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/managers/DeviceManager.js +429 -0
- package/lib/module/managers/DeviceManager.js.map +1 -0
- package/lib/module/managers/OTAManager.js +219 -0
- package/lib/module/managers/OTAManager.js.map +1 -0
- package/lib/module/managers/RecordingManager.js +376 -0
- package/lib/module/managers/RecordingManager.js.map +1 -0
- package/lib/module/managers/index.js +8 -0
- package/lib/module/managers/index.js.map +1 -0
- package/lib/module/models/Device.js +2 -0
- package/lib/module/models/Device.js.map +1 -0
- package/lib/module/models/Recording.js +2 -0
- package/lib/module/models/Recording.js.map +1 -0
- package/lib/module/models/Status.js +2 -0
- package/lib/module/models/Status.js.map +1 -0
- package/lib/module/models/index.js +8 -0
- package/lib/module/models/index.js.map +1 -0
- package/lib/module/protocol/ProtocolHandler.js +336 -0
- package/lib/module/protocol/ProtocolHandler.js.map +1 -0
- package/lib/module/protocol/index.js +6 -0
- package/lib/module/protocol/index.js.map +1 -0
- package/lib/module/storage/StorageManager.js +324 -0
- package/lib/module/storage/StorageManager.js.map +1 -0
- package/lib/module/storage/index.js +6 -0
- package/lib/module/storage/index.js.map +1 -0
- package/lib/module/upload/S3Uploader.js +126 -0
- package/lib/module/upload/S3Uploader.js.map +1 -0
- package/lib/module/upload/UploadQueue.js +272 -0
- package/lib/module/upload/UploadQueue.js.map +1 -0
- package/lib/module/upload/index.js +7 -0
- package/lib/module/upload/index.js.map +1 -0
- package/lib/module/utils/errors.js +173 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/logger.js +129 -0
- package/lib/module/utils/logger.js.map +1 -0
- package/lib/module/utils/retry.js +149 -0
- package/lib/module/utils/retry.js.map +1 -0
- package/lib/typescript/src/BotaClient.d.ts +77 -0
- package/lib/typescript/src/BotaClient.d.ts.map +1 -0
- package/lib/typescript/src/ble/BleManager.d.ts +111 -0
- package/lib/typescript/src/ble/BleManager.d.ts.map +1 -0
- package/lib/typescript/src/ble/constants.d.ts +111 -0
- package/lib/typescript/src/ble/constants.d.ts.map +1 -0
- package/lib/typescript/src/ble/index.d.ts +7 -0
- package/lib/typescript/src/ble/index.d.ts.map +1 -0
- package/lib/typescript/src/ble/parsers.d.ts +100 -0
- package/lib/typescript/src/ble/parsers.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +16 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/managers/DeviceManager.d.ts +84 -0
- package/lib/typescript/src/managers/DeviceManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/OTAManager.d.ts +78 -0
- package/lib/typescript/src/managers/OTAManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/RecordingManager.d.ts +90 -0
- package/lib/typescript/src/managers/RecordingManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/index.d.ts +7 -0
- package/lib/typescript/src/managers/index.d.ts.map +1 -0
- package/lib/typescript/src/models/Device.d.ts +139 -0
- package/lib/typescript/src/models/Device.d.ts.map +1 -0
- package/lib/typescript/src/models/Recording.d.ts +110 -0
- package/lib/typescript/src/models/Recording.d.ts.map +1 -0
- package/lib/typescript/src/models/Status.d.ts +104 -0
- package/lib/typescript/src/models/Status.d.ts.map +1 -0
- package/lib/typescript/src/models/index.d.ts +7 -0
- package/lib/typescript/src/models/index.d.ts.map +1 -0
- package/lib/typescript/src/protocol/ProtocolHandler.d.ts +69 -0
- package/lib/typescript/src/protocol/ProtocolHandler.d.ts.map +1 -0
- package/lib/typescript/src/protocol/index.d.ts +5 -0
- package/lib/typescript/src/protocol/index.d.ts.map +1 -0
- package/lib/typescript/src/storage/StorageManager.d.ts +116 -0
- package/lib/typescript/src/storage/StorageManager.d.ts.map +1 -0
- package/lib/typescript/src/storage/index.d.ts +5 -0
- package/lib/typescript/src/storage/index.d.ts.map +1 -0
- package/lib/typescript/src/upload/S3Uploader.d.ts +38 -0
- package/lib/typescript/src/upload/S3Uploader.d.ts.map +1 -0
- package/lib/typescript/src/upload/UploadQueue.d.ts +95 -0
- package/lib/typescript/src/upload/UploadQueue.d.ts.map +1 -0
- package/lib/typescript/src/upload/index.d.ts +6 -0
- package/lib/typescript/src/upload/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/errors.d.ts +82 -0
- package/lib/typescript/src/utils/errors.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +7 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/logger.d.ts +68 -0
- package/lib/typescript/src/utils/logger.d.ts.map +1 -0
- package/lib/typescript/src/utils/retry.d.ts +53 -0
- package/lib/typescript/src/utils/retry.d.ts.map +1 -0
- package/package.json +95 -0
- package/src/BotaClient.ts +238 -0
- package/src/ble/BleManager.ts +573 -0
- package/src/ble/constants.ts +158 -0
- package/src/ble/index.ts +7 -0
- package/src/ble/parsers.ts +395 -0
- package/src/index.ts +64 -0
- package/src/managers/DeviceManager.ts +545 -0
- package/src/managers/OTAManager.ts +263 -0
- package/src/managers/RecordingManager.ts +434 -0
- package/src/managers/index.ts +12 -0
- package/src/models/Device.ts +164 -0
- package/src/models/Recording.ts +123 -0
- package/src/models/Status.ts +126 -0
- package/src/models/index.ts +7 -0
- package/src/protocol/ProtocolHandler.ts +459 -0
- package/src/protocol/index.ts +5 -0
- package/src/storage/StorageManager.ts +343 -0
- package/src/storage/index.ts +5 -0
- package/src/upload/S3Uploader.ts +164 -0
- package/src/upload/UploadQueue.ts +310 -0
- package/src/upload/index.ts +6 -0
- package/src/utils/errors.ts +310 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +137 -0
- package/src/utils/retry.ts +177 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AsyncStorage","Buffer","logger","log","tag","STORAGE_PREFIX","UPLOAD_QUEUE_KEY","SDK_STATE_KEY","StorageManager","uploadQueue","sdkState","lastSyncTimes","deviceInfo","isInitialized","initialize","debug","queueData","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","from","deleteRecordingData","removeItem","clearAll","keys","getAllKeys","botaKeys","k","startsWith","multiRemove","destroy","generateTaskId","now","Math","random","substring"],"sourceRoot":"../../../src","sources":["storage/StorageManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StorageManager","generateTaskId"],"sourceRoot":"../../../src","sources":["storage/index.ts"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,cAAc,EAAEC,cAAc,QAAQ,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 Uploader - Handles uploading audio files to S3 using pre-signed URLs
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { UploadError } from '../utils/errors';
|
|
6
|
+
import { logger } from '../utils/logger';
|
|
7
|
+
const log = logger.tag('S3Uploader');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Upload progress callback
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Upload options
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* S3 Uploader class
|
|
19
|
+
*/
|
|
20
|
+
export class S3Uploader {
|
|
21
|
+
/**
|
|
22
|
+
* Upload a file to S3 using a pre-signed URL
|
|
23
|
+
*/
|
|
24
|
+
async upload(data, uploadUrl, options = {}) {
|
|
25
|
+
const {
|
|
26
|
+
contentType = 'audio/opus',
|
|
27
|
+
onProgress,
|
|
28
|
+
abortSignal
|
|
29
|
+
} = options;
|
|
30
|
+
log.info('Starting S3 upload', {
|
|
31
|
+
size: data.length,
|
|
32
|
+
contentType
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
// For React Native, we use fetch with the PUT method
|
|
36
|
+
const response = await fetch(uploadUrl, {
|
|
37
|
+
method: 'PUT',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': contentType,
|
|
40
|
+
'Content-Length': data.length.toString()
|
|
41
|
+
},
|
|
42
|
+
body: data,
|
|
43
|
+
signal: abortSignal
|
|
44
|
+
});
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
47
|
+
log.error('S3 upload failed', undefined, {
|
|
48
|
+
status: response.status,
|
|
49
|
+
statusText: response.statusText,
|
|
50
|
+
error: errorText
|
|
51
|
+
});
|
|
52
|
+
if (response.status === 403) {
|
|
53
|
+
throw UploadError.urlExpired('');
|
|
54
|
+
}
|
|
55
|
+
throw new UploadError(`S3 upload failed: ${response.status} ${response.statusText}`, 'S3_UPLOAD_FAILED');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Report completion
|
|
59
|
+
onProgress?.(1.0);
|
|
60
|
+
log.info('S3 upload completed', {
|
|
61
|
+
size: data.length
|
|
62
|
+
});
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (error instanceof UploadError) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
const err = error;
|
|
68
|
+
|
|
69
|
+
// Check for abort
|
|
70
|
+
if (err.name === 'AbortError') {
|
|
71
|
+
throw new UploadError('Upload was cancelled', 'UPLOAD_CANCELLED');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Check for network errors
|
|
75
|
+
if (err.message?.includes('Network request failed')) {
|
|
76
|
+
throw UploadError.networkUnavailable();
|
|
77
|
+
}
|
|
78
|
+
throw new UploadError(`Upload failed: ${err.message}`, 'UPLOAD_FAILED', undefined, err);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Upload a file in chunks (for larger files)
|
|
84
|
+
* Note: This requires multipart upload support from the pre-signed URL
|
|
85
|
+
*/
|
|
86
|
+
async uploadChunked(data, uploadUrl, options = {}) {
|
|
87
|
+
// For now, delegate to simple upload
|
|
88
|
+
// In production, you'd implement S3 multipart upload here
|
|
89
|
+
return this.upload(data, uploadUrl, options);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Notify the backend that upload is complete
|
|
94
|
+
*/
|
|
95
|
+
async notifyCompletion(completeUrl, recordingId, uploadToken) {
|
|
96
|
+
log.debug('Notifying upload completion', {
|
|
97
|
+
recordingId
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
const response = await fetch(completeUrl, {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers: {
|
|
103
|
+
'Content-Type': 'application/json',
|
|
104
|
+
Authorization: `Bearer ${uploadToken}`
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
recording_id: recordingId
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
112
|
+
throw new UploadError(`Completion notification failed: ${response.status} - ${errorText}`, 'COMPLETION_FAILED');
|
|
113
|
+
}
|
|
114
|
+
log.info('Upload completion notified', {
|
|
115
|
+
recordingId
|
|
116
|
+
});
|
|
117
|
+
} catch (error) {
|
|
118
|
+
if (error instanceof UploadError) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
const err = error;
|
|
122
|
+
throw UploadError.completionFailed('', err);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=S3Uploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["UploadError","logger","log","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","urlExpired","err","name","message","includes","networkUnavailable","uploadChunked","notifyCompletion","completeUrl","recordingId","uploadToken","debug","Authorization","JSON","stringify","recording_id","completionFailed"],"sourceRoot":"../../../src","sources":["upload/S3Uploader.ts"],"mappings":"AAAA;AACA;AACA;;AAIA,SAASA,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,MAAM,QAAQ,iBAAiB;AAExC,MAAMC,GAAG,GAAGD,MAAM,CAACE,GAAG,CAAC,YAAY,CAAC;;AAEpC;AACA;AACA;;AAGA;AACA;AACA;;AAUA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,CAAC;EACtB;AACF;AACA;EACE,MAAMC,MAAMA,CACVC,IAAY,EACZC,SAAiB,EACjBC,OAAsB,GAAG,CAAC,CAAC,EACZ;IACf,MAAM;MACJC,WAAW,GAAG,YAAY;MAC1BC,UAAU;MACVC;IACF,CAAC,GAAGH,OAAO;IAEXN,GAAG,CAACU,IAAI,CAAC,oBAAoB,EAAE;MAC7BC,IAAI,EAAEP,IAAI,CAACQ,MAAM;MACjBL;IACF,CAAC,CAAC;IAEF,IAAI;MACF;MACA,MAAMM,QAAQ,GAAG,MAAMC,KAAK,CAACT,SAAS,EAAE;QACtCU,MAAM,EAAE,KAAK;QACbC,OAAO,EAAE;UACP,cAAc,EAAET,WAAW;UAC3B,gBAAgB,EAAEH,IAAI,CAACQ,MAAM,CAACK,QAAQ,CAAC;QACzC,CAAC;QACDC,IAAI,EAAEd,IAAI;QACVe,MAAM,EAAEV;MACV,CAAC,CAAC;MAEF,IAAI,CAACI,QAAQ,CAACO,EAAE,EAAE;QAChB,MAAMC,SAAS,GAAG,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,eAAe,CAAC;QACpEvB,GAAG,CAACwB,KAAK,CAAC,kBAAkB,EAAEC,SAAS,EAAE;UACvCC,MAAM,EAAEb,QAAQ,CAACa,MAAM;UACvBC,UAAU,EAAEd,QAAQ,CAACc,UAAU;UAC/BH,KAAK,EAAEH;QACT,CAAC,CAAC;QAEF,IAAIR,QAAQ,CAACa,MAAM,KAAK,GAAG,EAAE;UAC3B,MAAM5B,WAAW,CAAC8B,UAAU,CAAC,EAAE,CAAC;QAClC;QAEA,MAAM,IAAI9B,WAAW,CACnB,qBAAqBe,QAAQ,CAACa,MAAM,IAAIb,QAAQ,CAACc,UAAU,EAAE,EAC7D,kBACF,CAAC;MACH;;MAEA;MACAnB,UAAU,GAAG,GAAG,CAAC;MAEjBR,GAAG,CAACU,IAAI,CAAC,qBAAqB,EAAE;QAAEC,IAAI,EAAEP,IAAI,CAACQ;MAAO,CAAC,CAAC;IACxD,CAAC,CAAC,OAAOY,KAAK,EAAE;MACd,IAAIA,KAAK,YAAY1B,WAAW,EAAE;QAChC,MAAM0B,KAAK;MACb;MAEA,MAAMK,GAAG,GAAGL,KAAc;;MAE1B;MACA,IAAIK,GAAG,CAACC,IAAI,KAAK,YAAY,EAAE;QAC7B,MAAM,IAAIhC,WAAW,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;MACnE;;MAEA;MACA,IAAI+B,GAAG,CAACE,OAAO,EAAEC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;QACnD,MAAMlC,WAAW,CAACmC,kBAAkB,CAAC,CAAC;MACxC;MAEA,MAAM,IAAInC,WAAW,CACnB,kBAAkB+B,GAAG,CAACE,OAAO,EAAE,EAC/B,eAAe,EACfN,SAAS,EACTI,GACF,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAMK,aAAaA,CACjB9B,IAAY,EACZC,SAAiB,EACjBC,OAAsB,GAAG,CAAC,CAAC,EACZ;IACf;IACA;IACA,OAAO,IAAI,CAACH,MAAM,CAACC,IAAI,EAAEC,SAAS,EAAEC,OAAO,CAAC;EAC9C;;EAEA;AACF;AACA;EACE,MAAM6B,gBAAgBA,CACpBC,WAAmB,EACnBC,WAAmB,EACnBC,WAAmB,EACJ;IACftC,GAAG,CAACuC,KAAK,CAAC,6BAA6B,EAAE;MAAEF;IAAY,CAAC,CAAC;IAEzD,IAAI;MACF,MAAMxB,QAAQ,GAAG,MAAMC,KAAK,CAACsB,WAAW,EAAE;QACxCrB,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UACP,cAAc,EAAE,kBAAkB;UAClCwB,aAAa,EAAE,UAAUF,WAAW;QACtC,CAAC;QACDpB,IAAI,EAAEuB,IAAI,CAACC,SAAS,CAAC;UAAEC,YAAY,EAAEN;QAAY,CAAC;MACpD,CAAC,CAAC;MAEF,IAAI,CAACxB,QAAQ,CAACO,EAAE,EAAE;QAChB,MAAMC,SAAS,GAAG,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,eAAe,CAAC;QACpE,MAAM,IAAIzB,WAAW,CACnB,mCAAmCe,QAAQ,CAACa,MAAM,MAAML,SAAS,EAAE,EACnE,mBACF,CAAC;MACH;MAEArB,GAAG,CAACU,IAAI,CAAC,4BAA4B,EAAE;QAAE2B;MAAY,CAAC,CAAC;IACzD,CAAC,CAAC,OAAOb,KAAK,EAAE;MACd,IAAIA,KAAK,YAAY1B,WAAW,EAAE;QAChC,MAAM0B,KAAK;MACb;MAEA,MAAMK,GAAG,GAAGL,KAAc;MAC1B,MAAM1B,WAAW,CAAC8C,gBAAgB,CAAC,EAAE,EAAEf,GAAG,CAAC;IAC7C;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Queue - Manages persistent upload queue with retry logic
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import EventEmitter from 'eventemitter3';
|
|
6
|
+
import { generateTaskId } from '../storage/StorageManager';
|
|
7
|
+
import { S3Uploader } from './S3Uploader';
|
|
8
|
+
import { shouldContinueRetrying } from '../utils/retry';
|
|
9
|
+
import { logger } from '../utils/logger';
|
|
10
|
+
const log = logger.tag('UploadQueue');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Events emitted by UploadQueue
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Upload Queue configuration
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Upload Queue class
|
|
22
|
+
*/
|
|
23
|
+
export class UploadQueue extends EventEmitter {
|
|
24
|
+
activeUploads = new Set();
|
|
25
|
+
isPaused = false;
|
|
26
|
+
isProcessing = false;
|
|
27
|
+
abortControllers = new Map();
|
|
28
|
+
constructor(storage, config = {}) {
|
|
29
|
+
super();
|
|
30
|
+
this.storage = storage;
|
|
31
|
+
this.uploader = new S3Uploader();
|
|
32
|
+
this.maxConcurrent = config.maxConcurrent ?? 2;
|
|
33
|
+
this.maxRetries = config.maxRetries ?? 6;
|
|
34
|
+
if (config.autoStart !== false) {
|
|
35
|
+
this.processQueue();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Add a new upload task to the queue
|
|
41
|
+
*/
|
|
42
|
+
async enqueue(params) {
|
|
43
|
+
const task = {
|
|
44
|
+
id: generateTaskId(),
|
|
45
|
+
recordingId: params.recordingId,
|
|
46
|
+
deviceId: params.deviceId,
|
|
47
|
+
localPath: params.localPath,
|
|
48
|
+
uploadUrl: params.uploadUrl,
|
|
49
|
+
uploadToken: params.uploadToken,
|
|
50
|
+
completeUrl: params.completeUrl,
|
|
51
|
+
status: 'pending',
|
|
52
|
+
retryCount: 0,
|
|
53
|
+
createdAt: new Date(),
|
|
54
|
+
updatedAt: new Date()
|
|
55
|
+
};
|
|
56
|
+
await this.storage.addUploadTask(task);
|
|
57
|
+
this.emit('taskAdded', task);
|
|
58
|
+
log.info('Task enqueued', {
|
|
59
|
+
taskId: task.id,
|
|
60
|
+
recordingId: task.recordingId
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Trigger queue processing
|
|
64
|
+
this.processQueue();
|
|
65
|
+
return task;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Cancel a specific upload task
|
|
70
|
+
*/
|
|
71
|
+
async cancel(taskId) {
|
|
72
|
+
log.info('Cancelling task', {
|
|
73
|
+
taskId
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Abort if currently uploading
|
|
77
|
+
const controller = this.abortControllers.get(taskId);
|
|
78
|
+
if (controller) {
|
|
79
|
+
controller.abort();
|
|
80
|
+
this.abortControllers.delete(taskId);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Remove from active uploads
|
|
84
|
+
this.activeUploads.delete(taskId);
|
|
85
|
+
|
|
86
|
+
// Remove from queue
|
|
87
|
+
await this.storage.removeUploadTask(taskId);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Cancel all uploads
|
|
92
|
+
*/
|
|
93
|
+
async cancelAll() {
|
|
94
|
+
log.info('Cancelling all uploads');
|
|
95
|
+
|
|
96
|
+
// Abort all active uploads
|
|
97
|
+
for (const controller of this.abortControllers.values()) {
|
|
98
|
+
controller.abort();
|
|
99
|
+
}
|
|
100
|
+
this.abortControllers.clear();
|
|
101
|
+
this.activeUploads.clear();
|
|
102
|
+
|
|
103
|
+
// Clear queue
|
|
104
|
+
await this.storage.clearAllTasks();
|
|
105
|
+
this.emit('queueEmpty');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Pause queue processing
|
|
110
|
+
*/
|
|
111
|
+
pause() {
|
|
112
|
+
log.info('Pausing upload queue');
|
|
113
|
+
this.isPaused = true;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Resume queue processing
|
|
118
|
+
*/
|
|
119
|
+
resume() {
|
|
120
|
+
log.info('Resuming upload queue');
|
|
121
|
+
this.isPaused = false;
|
|
122
|
+
this.processQueue();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Retry all failed uploads
|
|
127
|
+
*/
|
|
128
|
+
async retryFailed() {
|
|
129
|
+
log.info('Retrying failed uploads');
|
|
130
|
+
const failedTasks = this.storage.getFailedUploads();
|
|
131
|
+
for (const task of failedTasks) {
|
|
132
|
+
if (task.retryCount < this.maxRetries) {
|
|
133
|
+
await this.storage.updateTaskStatus(task.id, 'pending');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
this.processQueue();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Get all pending tasks
|
|
141
|
+
*/
|
|
142
|
+
getPendingTasks() {
|
|
143
|
+
return this.storage.getPendingUploads();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Get all tasks
|
|
148
|
+
*/
|
|
149
|
+
getAllTasks() {
|
|
150
|
+
return this.storage.getUploadQueue();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Process the upload queue
|
|
155
|
+
*/
|
|
156
|
+
async processQueue() {
|
|
157
|
+
if (this.isPaused || this.isProcessing) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
this.isProcessing = true;
|
|
161
|
+
try {
|
|
162
|
+
while (!this.isPaused) {
|
|
163
|
+
// Check if we can start more uploads
|
|
164
|
+
if (this.activeUploads.size >= this.maxConcurrent) {
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Get next pending task
|
|
169
|
+
const pendingTasks = this.storage.getPendingUploads();
|
|
170
|
+
const nextTask = pendingTasks.find(t => !this.activeUploads.has(t.id) && t.status === 'pending');
|
|
171
|
+
if (!nextTask) {
|
|
172
|
+
// No more tasks to process
|
|
173
|
+
if (this.activeUploads.size === 0) {
|
|
174
|
+
this.emit('queueEmpty');
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Start upload in background
|
|
180
|
+
this.processTask(nextTask);
|
|
181
|
+
}
|
|
182
|
+
} finally {
|
|
183
|
+
this.isProcessing = false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Process a single upload task
|
|
189
|
+
*/
|
|
190
|
+
async processTask(task) {
|
|
191
|
+
this.activeUploads.add(task.id);
|
|
192
|
+
const abortController = new AbortController();
|
|
193
|
+
this.abortControllers.set(task.id, abortController);
|
|
194
|
+
try {
|
|
195
|
+
// Update status to uploading
|
|
196
|
+
await this.storage.updateTaskStatus(task.id, 'uploading');
|
|
197
|
+
this.emit('taskUpdated', {
|
|
198
|
+
...task,
|
|
199
|
+
status: 'uploading'
|
|
200
|
+
});
|
|
201
|
+
log.info('Starting upload', {
|
|
202
|
+
taskId: task.id,
|
|
203
|
+
recordingId: task.recordingId
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
// Load the audio data
|
|
207
|
+
const audioData = await this.storage.loadRecordingData(task.localPath);
|
|
208
|
+
|
|
209
|
+
// Upload to S3
|
|
210
|
+
await this.uploader.upload(audioData, task.uploadUrl, {
|
|
211
|
+
onProgress: progress => {
|
|
212
|
+
this.emit('uploadProgress', task.id, progress);
|
|
213
|
+
},
|
|
214
|
+
abortSignal: abortController.signal
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Notify completion
|
|
218
|
+
await this.uploader.notifyCompletion(task.completeUrl, task.recordingId, task.uploadToken);
|
|
219
|
+
|
|
220
|
+
// Mark as completed
|
|
221
|
+
await this.storage.updateTaskStatus(task.id, 'completed');
|
|
222
|
+
|
|
223
|
+
// Clean up local file
|
|
224
|
+
await this.storage.deleteRecordingData(task.localPath);
|
|
225
|
+
log.info('Upload completed', {
|
|
226
|
+
taskId: task.id,
|
|
227
|
+
recordingId: task.recordingId
|
|
228
|
+
});
|
|
229
|
+
this.emit('taskCompleted', task.id, task.recordingId);
|
|
230
|
+
} catch (error) {
|
|
231
|
+
const err = error;
|
|
232
|
+
log.error('Upload failed', err, {
|
|
233
|
+
taskId: task.id
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// Check if we should retry
|
|
237
|
+
if (task.retryCount < this.maxRetries && shouldContinueRetrying(task.createdAt)) {
|
|
238
|
+
await this.storage.incrementRetryCount(task.id);
|
|
239
|
+
await this.storage.updateTaskStatus(task.id, 'pending', err.message);
|
|
240
|
+
log.info('Task will be retried', {
|
|
241
|
+
taskId: task.id,
|
|
242
|
+
retryCount: task.retryCount + 1
|
|
243
|
+
});
|
|
244
|
+
} else {
|
|
245
|
+
await this.storage.updateTaskStatus(task.id, 'failed', err.message);
|
|
246
|
+
this.emit('taskFailed', task.id, err);
|
|
247
|
+
}
|
|
248
|
+
} finally {
|
|
249
|
+
this.activeUploads.delete(task.id);
|
|
250
|
+
this.abortControllers.delete(task.id);
|
|
251
|
+
|
|
252
|
+
// Process next task
|
|
253
|
+
this.processQueue();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Clean up resources
|
|
259
|
+
*/
|
|
260
|
+
destroy() {
|
|
261
|
+
this.isPaused = true;
|
|
262
|
+
|
|
263
|
+
// Abort all active uploads
|
|
264
|
+
for (const controller of this.abortControllers.values()) {
|
|
265
|
+
controller.abort();
|
|
266
|
+
}
|
|
267
|
+
this.abortControllers.clear();
|
|
268
|
+
this.activeUploads.clear();
|
|
269
|
+
this.removeAllListeners();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=UploadQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EventEmitter","generateTaskId","S3Uploader","shouldContinueRetrying","logger","log","tag","UploadQueue","activeUploads","Set","isPaused","isProcessing","abortControllers","Map","constructor","storage","config","uploader","maxConcurrent","maxRetries","autoStart","processQueue","enqueue","params","task","id","recordingId","deviceId","localPath","uploadUrl","uploadToken","completeUrl","status","retryCount","createdAt","Date","updatedAt","addUploadTask","emit","info","taskId","cancel","controller","get","abort","delete","removeUploadTask","cancelAll","values","clear","clearAllTasks","pause","resume","retryFailed","failedTasks","getFailedUploads","updateTaskStatus","getPendingTasks","getPendingUploads","getAllTasks","getUploadQueue","size","pendingTasks","nextTask","find","t","has","processTask","add","abortController","AbortController","set","audioData","loadRecordingData","upload","onProgress","progress","abortSignal","signal","notifyCompletion","deleteRecordingData","error","err","incrementRetryCount","message","destroy","removeAllListeners"],"sourceRoot":"../../../src","sources":["upload/UploadQueue.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["S3Uploader","UploadQueue"],"sourceRoot":"../../../src","sources":["upload/index.ts"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,UAAU,QAAyD,cAAc;AAC1F,SAASC,WAAW,QAAgC,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error types for the Bota SDK
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Base error class for all Bota SDK errors
|
|
7
|
+
*/
|
|
8
|
+
export class BotaError extends Error {
|
|
9
|
+
constructor(message, code, cause) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.cause = cause;
|
|
13
|
+
this.name = 'BotaError';
|
|
14
|
+
Object.setPrototypeOf(this, BotaError.prototype);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Bluetooth-related errors
|
|
20
|
+
*/
|
|
21
|
+
export class BluetoothError extends BotaError {
|
|
22
|
+
constructor(message, code, cause) {
|
|
23
|
+
super(message, code, cause);
|
|
24
|
+
this.name = 'BluetoothError';
|
|
25
|
+
Object.setPrototypeOf(this, BluetoothError.prototype);
|
|
26
|
+
}
|
|
27
|
+
static unavailable() {
|
|
28
|
+
return new BluetoothError('Bluetooth is not available on this device', 'BLUETOOTH_UNAVAILABLE');
|
|
29
|
+
}
|
|
30
|
+
static unauthorized() {
|
|
31
|
+
return new BluetoothError('Bluetooth permission not granted', 'BLUETOOTH_UNAUTHORIZED');
|
|
32
|
+
}
|
|
33
|
+
static poweredOff() {
|
|
34
|
+
return new BluetoothError('Bluetooth is powered off', 'BLUETOOTH_OFF');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Device-related errors
|
|
40
|
+
*/
|
|
41
|
+
export class DeviceError extends BotaError {
|
|
42
|
+
constructor(message, code, deviceId, cause) {
|
|
43
|
+
super(message, code, cause);
|
|
44
|
+
this.deviceId = deviceId;
|
|
45
|
+
this.name = 'DeviceError';
|
|
46
|
+
Object.setPrototypeOf(this, DeviceError.prototype);
|
|
47
|
+
}
|
|
48
|
+
static notFound(deviceId) {
|
|
49
|
+
return new DeviceError(`Device ${deviceId} not found`, 'DEVICE_NOT_FOUND', deviceId);
|
|
50
|
+
}
|
|
51
|
+
static connectionFailed(deviceId, cause) {
|
|
52
|
+
return new DeviceError(`Failed to connect to device ${deviceId}`, 'CONNECTION_FAILED', deviceId, cause);
|
|
53
|
+
}
|
|
54
|
+
static connectionLost(deviceId, during) {
|
|
55
|
+
const message = during ? `Connection to device ${deviceId} lost during ${during}` : `Connection to device ${deviceId} lost`;
|
|
56
|
+
return new DeviceError(message, 'CONNECTION_LOST', deviceId);
|
|
57
|
+
}
|
|
58
|
+
static bondingFailed(deviceId, cause) {
|
|
59
|
+
return new DeviceError(`Bonding failed for device ${deviceId}`, 'BONDING_FAILED', deviceId, cause);
|
|
60
|
+
}
|
|
61
|
+
static notConnected(deviceId) {
|
|
62
|
+
return new DeviceError(`Device ${deviceId} is not connected`, 'NOT_CONNECTED', deviceId);
|
|
63
|
+
}
|
|
64
|
+
static alreadyConnected(deviceId) {
|
|
65
|
+
return new DeviceError(`Device ${deviceId} is already connected`, 'ALREADY_CONNECTED', deviceId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Provisioning-related errors
|
|
71
|
+
*/
|
|
72
|
+
export class ProvisioningError extends BotaError {
|
|
73
|
+
constructor(message, code, deviceId, cause) {
|
|
74
|
+
super(message, code, cause);
|
|
75
|
+
this.deviceId = deviceId;
|
|
76
|
+
this.name = 'ProvisioningError';
|
|
77
|
+
Object.setPrototypeOf(this, ProvisioningError.prototype);
|
|
78
|
+
}
|
|
79
|
+
static invalidToken(deviceId) {
|
|
80
|
+
return new ProvisioningError('Device rejected the token as invalid', 'INVALID_TOKEN', deviceId);
|
|
81
|
+
}
|
|
82
|
+
static storageError(deviceId) {
|
|
83
|
+
return new ProvisioningError('Device failed to store the token', 'STORAGE_ERROR', deviceId);
|
|
84
|
+
}
|
|
85
|
+
static chunkError(deviceId) {
|
|
86
|
+
return new ProvisioningError('Token chunk transfer failed', 'CHUNK_ERROR', deviceId);
|
|
87
|
+
}
|
|
88
|
+
static alreadyProvisioned(deviceId) {
|
|
89
|
+
return new ProvisioningError('Device is already provisioned', 'ALREADY_PROVISIONED', deviceId);
|
|
90
|
+
}
|
|
91
|
+
static timeout(deviceId) {
|
|
92
|
+
return new ProvisioningError('Provisioning timed out waiting for device response', 'PROVISIONING_TIMEOUT', deviceId);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Transfer-related errors
|
|
98
|
+
*/
|
|
99
|
+
export class TransferError extends BotaError {
|
|
100
|
+
constructor(message, code, recordingUuid, cause) {
|
|
101
|
+
super(message, code, cause);
|
|
102
|
+
this.recordingUuid = recordingUuid;
|
|
103
|
+
this.name = 'TransferError';
|
|
104
|
+
Object.setPrototypeOf(this, TransferError.prototype);
|
|
105
|
+
}
|
|
106
|
+
static recordingNotFound(uuid) {
|
|
107
|
+
return new TransferError(`Recording ${uuid} not found on device`, 'RECORDING_NOT_FOUND', uuid);
|
|
108
|
+
}
|
|
109
|
+
static checksumMismatch(uuid) {
|
|
110
|
+
return new TransferError(`Checksum mismatch for recording ${uuid}`, 'CHECKSUM_MISMATCH', uuid);
|
|
111
|
+
}
|
|
112
|
+
static interrupted(uuid, cause) {
|
|
113
|
+
return new TransferError(`Transfer interrupted for recording ${uuid}`, 'TRANSFER_INTERRUPTED', uuid, cause);
|
|
114
|
+
}
|
|
115
|
+
static timeout(uuid) {
|
|
116
|
+
return new TransferError(`Transfer timed out for recording ${uuid}`, 'TRANSFER_TIMEOUT', uuid);
|
|
117
|
+
}
|
|
118
|
+
static deviceError(uuid, errorCode) {
|
|
119
|
+
return new TransferError(`Device error (code: ${errorCode}) during transfer of ${uuid}`, 'DEVICE_ERROR', uuid);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Upload-related errors
|
|
125
|
+
*/
|
|
126
|
+
export class UploadError extends BotaError {
|
|
127
|
+
constructor(message, code, taskId, cause) {
|
|
128
|
+
super(message, code, cause);
|
|
129
|
+
this.taskId = taskId;
|
|
130
|
+
this.name = 'UploadError';
|
|
131
|
+
Object.setPrototypeOf(this, UploadError.prototype);
|
|
132
|
+
}
|
|
133
|
+
static urlExpired(taskId) {
|
|
134
|
+
return new UploadError('Upload URL has expired', 'URL_EXPIRED', taskId);
|
|
135
|
+
}
|
|
136
|
+
static networkUnavailable() {
|
|
137
|
+
return new UploadError('Network is not available', 'NETWORK_UNAVAILABLE');
|
|
138
|
+
}
|
|
139
|
+
static uploadFailed(taskId, cause) {
|
|
140
|
+
return new UploadError(`Upload failed for task ${taskId}`, 'UPLOAD_FAILED', taskId, cause);
|
|
141
|
+
}
|
|
142
|
+
static completionFailed(taskId, cause) {
|
|
143
|
+
return new UploadError(`Failed to notify completion for task ${taskId}`, 'COMPLETION_FAILED', taskId, cause);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* SDK state errors
|
|
149
|
+
*/
|
|
150
|
+
export class SdkError extends BotaError {
|
|
151
|
+
constructor(message, code, cause) {
|
|
152
|
+
super(message, code, cause);
|
|
153
|
+
this.name = 'SdkError';
|
|
154
|
+
Object.setPrototypeOf(this, SdkError.prototype);
|
|
155
|
+
}
|
|
156
|
+
static notInitialized() {
|
|
157
|
+
return new SdkError('SDK has not been initialized. Call BotaClient.configure() first.', 'NOT_INITIALIZED');
|
|
158
|
+
}
|
|
159
|
+
static invalidState(expected, actual) {
|
|
160
|
+
return new SdkError(`Invalid state: expected ${expected}, got ${actual}`, 'INVALID_STATE');
|
|
161
|
+
}
|
|
162
|
+
static timeout(operation) {
|
|
163
|
+
return new SdkError(`Operation timed out: ${operation}`, 'TIMEOUT');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Type guard to check if an error is a BotaError
|
|
169
|
+
*/
|
|
170
|
+
export function isBotaError(error) {
|
|
171
|
+
return error instanceof BotaError;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BotaError","Error","constructor","message","code","cause","name","Object","setPrototypeOf","prototype","BluetoothError","unavailable","unauthorized","poweredOff","DeviceError","deviceId","notFound","connectionFailed","connectionLost","during","bondingFailed","notConnected","alreadyConnected","ProvisioningError","invalidToken","storageError","chunkError","alreadyProvisioned","timeout","TransferError","recordingUuid","recordingNotFound","uuid","checksumMismatch","interrupted","deviceError","errorCode","UploadError","taskId","urlExpired","networkUnavailable","uploadFailed","completionFailed","SdkError","notInitialized","invalidState","expected","actual","operation","isBotaError","error"],"sourceRoot":"../../../src","sources":["utils/errors.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["logger"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":"AAAA;AACA;AACA;;AAEA,cAAc,UAAU;AACxB,SAASA,MAAM,QAAQ,UAAU;AACjC,cAAc,SAAS","ignoreList":[]}
|