@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,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Logger utility for the Bota SDK
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const LOG_LEVELS = {
|
|
12
|
+
debug: 0,
|
|
13
|
+
info: 1,
|
|
14
|
+
warn: 2,
|
|
15
|
+
error: 3,
|
|
16
|
+
none: 4
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Logger class with configurable log levels
|
|
21
|
+
*/
|
|
22
|
+
class Logger {
|
|
23
|
+
level = 'warn';
|
|
24
|
+
prefix = '[BotaSDK]';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Set the log level
|
|
28
|
+
*/
|
|
29
|
+
setLevel(level) {
|
|
30
|
+
this.level = level;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Get the current log level
|
|
35
|
+
*/
|
|
36
|
+
getLevel() {
|
|
37
|
+
return this.level;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Check if a log level should be output
|
|
42
|
+
*/
|
|
43
|
+
shouldLog(level) {
|
|
44
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Format a log message with optional context
|
|
49
|
+
*/
|
|
50
|
+
format(level, message, context) {
|
|
51
|
+
const timestamp = new Date().toISOString();
|
|
52
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
53
|
+
return `${timestamp} ${this.prefix} [${level.toUpperCase()}] ${message}${contextStr}`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Log a debug message
|
|
58
|
+
*/
|
|
59
|
+
debug(message, context) {
|
|
60
|
+
if (this.shouldLog('debug')) {
|
|
61
|
+
console.debug(this.format('debug', message, context));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Log an info message
|
|
67
|
+
*/
|
|
68
|
+
info(message, context) {
|
|
69
|
+
if (this.shouldLog('info')) {
|
|
70
|
+
console.info(this.format('info', message, context));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Log a warning message
|
|
76
|
+
*/
|
|
77
|
+
warn(message, context) {
|
|
78
|
+
if (this.shouldLog('warn')) {
|
|
79
|
+
console.warn(this.format('warn', message, context));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Log an error message
|
|
85
|
+
*/
|
|
86
|
+
error(message, error, context) {
|
|
87
|
+
if (this.shouldLog('error')) {
|
|
88
|
+
const fullContext = error ? {
|
|
89
|
+
...context,
|
|
90
|
+
error: error.message,
|
|
91
|
+
stack: error.stack
|
|
92
|
+
} : context;
|
|
93
|
+
console.error(this.format('error', message, fullContext));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Create a child logger with a specific tag
|
|
99
|
+
*/
|
|
100
|
+
tag(tag) {
|
|
101
|
+
return new TaggedLogger(this, tag);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Tagged logger for component-specific logging
|
|
107
|
+
*/
|
|
108
|
+
class TaggedLogger {
|
|
109
|
+
constructor(parent, tag) {
|
|
110
|
+
this.parent = parent;
|
|
111
|
+
this.tag = tag;
|
|
112
|
+
}
|
|
113
|
+
debug(message, context) {
|
|
114
|
+
this.parent.debug(`[${this.tag}] ${message}`, context);
|
|
115
|
+
}
|
|
116
|
+
info(message, context) {
|
|
117
|
+
this.parent.info(`[${this.tag}] ${message}`, context);
|
|
118
|
+
}
|
|
119
|
+
warn(message, context) {
|
|
120
|
+
this.parent.warn(`[${this.tag}] ${message}`, context);
|
|
121
|
+
}
|
|
122
|
+
error(message, error, context) {
|
|
123
|
+
this.parent.error(`[${this.tag}] ${message}`, error, context);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Singleton logger instance
|
|
129
|
+
*/
|
|
130
|
+
const logger = exports.logger = new Logger();
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Export types for external use
|
|
134
|
+
*/
|
|
135
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LOG_LEVELS","debug","info","warn","error","none","Logger","level","prefix","setLevel","getLevel","shouldLog","format","message","context","timestamp","Date","toISOString","contextStr","JSON","stringify","toUpperCase","console","fullContext","stack","tag","TaggedLogger","constructor","parent","logger","exports"],"sourceRoot":"../../../src","sources":["utils/logger.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DEFAULT_RETRY_DELAYS = void 0;
|
|
7
|
+
exports.calculateDelay = calculateDelay;
|
|
8
|
+
exports.makeRetryable = makeRetryable;
|
|
9
|
+
exports.shouldContinueRetrying = shouldContinueRetrying;
|
|
10
|
+
exports.sleep = sleep;
|
|
11
|
+
exports.withRetry = withRetry;
|
|
12
|
+
var _logger = require("./logger");
|
|
13
|
+
/**
|
|
14
|
+
* Retry utility with exponential backoff
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const log = _logger.logger.tag('Retry');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Retry configuration options
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Default retry delays based on Bota spec:
|
|
25
|
+
* Attempt 1: Immediate
|
|
26
|
+
* Attempt 2: 30 seconds
|
|
27
|
+
* Attempt 3: 2 minutes
|
|
28
|
+
* Attempt 4: 10 minutes
|
|
29
|
+
* Attempt 5: 1 hour
|
|
30
|
+
* Attempt 6: 4 hours
|
|
31
|
+
*/
|
|
32
|
+
const DEFAULT_RETRY_DELAYS = exports.DEFAULT_RETRY_DELAYS = [0,
|
|
33
|
+
// Immediate
|
|
34
|
+
30 * 1000,
|
|
35
|
+
// 30 seconds
|
|
36
|
+
2 * 60 * 1000,
|
|
37
|
+
// 2 minutes
|
|
38
|
+
10 * 60 * 1000,
|
|
39
|
+
// 10 minutes
|
|
40
|
+
60 * 60 * 1000,
|
|
41
|
+
// 1 hour
|
|
42
|
+
4 * 60 * 60 * 1000 // 4 hours
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Calculate delay for a retry attempt using exponential backoff
|
|
47
|
+
*/
|
|
48
|
+
function calculateDelay(attempt, options = {}) {
|
|
49
|
+
const {
|
|
50
|
+
baseDelayMs = 1000,
|
|
51
|
+
maxDelayMs = 14400000,
|
|
52
|
+
backoffMultiplier = 2,
|
|
53
|
+
jitter = true
|
|
54
|
+
} = options;
|
|
55
|
+
|
|
56
|
+
// Use predefined delays for upload retries
|
|
57
|
+
if (attempt < DEFAULT_RETRY_DELAYS.length) {
|
|
58
|
+
const delay = DEFAULT_RETRY_DELAYS[attempt];
|
|
59
|
+
if (jitter && delay > 0) {
|
|
60
|
+
// Add up to 10% jitter
|
|
61
|
+
return delay + Math.random() * delay * 0.1;
|
|
62
|
+
}
|
|
63
|
+
return delay;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Fall back to exponential backoff for additional retries
|
|
67
|
+
let delay = baseDelayMs * Math.pow(backoffMultiplier, attempt);
|
|
68
|
+
delay = Math.min(delay, maxDelayMs);
|
|
69
|
+
if (jitter) {
|
|
70
|
+
// Add up to 10% jitter
|
|
71
|
+
delay = delay + Math.random() * delay * 0.1;
|
|
72
|
+
}
|
|
73
|
+
return Math.floor(delay);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Sleep for a specified duration
|
|
78
|
+
*/
|
|
79
|
+
function sleep(ms) {
|
|
80
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Execute a function with retry logic
|
|
85
|
+
*/
|
|
86
|
+
async function withRetry(fn, options = {}) {
|
|
87
|
+
const {
|
|
88
|
+
maxAttempts = 6,
|
|
89
|
+
onRetry,
|
|
90
|
+
isRetryable = () => true
|
|
91
|
+
} = options;
|
|
92
|
+
let lastError;
|
|
93
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
94
|
+
try {
|
|
95
|
+
return await fn();
|
|
96
|
+
} catch (error) {
|
|
97
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
98
|
+
|
|
99
|
+
// Check if error is retryable
|
|
100
|
+
if (!isRetryable(lastError)) {
|
|
101
|
+
log.debug('Error is not retryable, throwing immediately', {
|
|
102
|
+
attempt,
|
|
103
|
+
error: lastError.message
|
|
104
|
+
});
|
|
105
|
+
throw lastError;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Check if we have more attempts
|
|
109
|
+
if (attempt >= maxAttempts - 1) {
|
|
110
|
+
log.warn('Max retry attempts reached', {
|
|
111
|
+
attempt: attempt + 1,
|
|
112
|
+
maxAttempts,
|
|
113
|
+
error: lastError.message
|
|
114
|
+
});
|
|
115
|
+
throw lastError;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Calculate delay
|
|
119
|
+
const delayMs = calculateDelay(attempt, options);
|
|
120
|
+
log.debug('Retrying after error', {
|
|
121
|
+
attempt: attempt + 1,
|
|
122
|
+
maxAttempts,
|
|
123
|
+
delayMs,
|
|
124
|
+
error: lastError.message
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Notify callback
|
|
128
|
+
if (onRetry) {
|
|
129
|
+
onRetry(attempt + 1, lastError, delayMs);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Wait before retrying
|
|
133
|
+
if (delayMs > 0) {
|
|
134
|
+
await sleep(delayMs);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// This should never be reached, but TypeScript needs it
|
|
140
|
+
throw lastError ?? new Error('Retry failed');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Create a retryable wrapper for a function
|
|
145
|
+
*/
|
|
146
|
+
function makeRetryable(fn, options = {}) {
|
|
147
|
+
return async (...args) => {
|
|
148
|
+
return withRetry(() => fn(...args), options);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Check if we should continue retrying based on total time elapsed
|
|
154
|
+
*/
|
|
155
|
+
function shouldContinueRetrying(startTime, maxDurationMs = 24 * 60 * 60 * 1000 // 24 hours
|
|
156
|
+
) {
|
|
157
|
+
const elapsed = Date.now() - startTime.getTime();
|
|
158
|
+
return elapsed < maxDurationMs;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_logger","require","log","logger","tag","DEFAULT_RETRY_DELAYS","exports","calculateDelay","attempt","options","baseDelayMs","maxDelayMs","backoffMultiplier","jitter","length","delay","Math","random","pow","min","floor","sleep","ms","Promise","resolve","setTimeout","withRetry","fn","maxAttempts","onRetry","isRetryable","lastError","error","Error","String","debug","message","warn","delayMs","makeRetryable","args","shouldContinueRetrying","startTime","maxDurationMs","elapsed","Date","now","getTime"],"sourceRoot":"../../../src","sources":["utils/retry.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bota Client - Main entry point for the Bota React Native SDK
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { State } from 'react-native-ble-plx';
|
|
6
|
+
import EventEmitter from 'eventemitter3';
|
|
7
|
+
import { getBleManager, resetBleManager } from './ble/BleManager';
|
|
8
|
+
import { DeviceManager } from './managers/DeviceManager';
|
|
9
|
+
import { RecordingManager } from './managers/RecordingManager';
|
|
10
|
+
import { OTAManager } from './managers/OTAManager';
|
|
11
|
+
import { SdkError } from './utils/errors';
|
|
12
|
+
import { logger } from './utils/logger';
|
|
13
|
+
const log = logger.tag('BotaClient');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Map react-native-ble-plx State to BluetoothState
|
|
17
|
+
*/
|
|
18
|
+
function mapBluetoothState(state) {
|
|
19
|
+
switch (state) {
|
|
20
|
+
case State.Unknown:
|
|
21
|
+
return 'unknown';
|
|
22
|
+
case State.Resetting:
|
|
23
|
+
return 'resetting';
|
|
24
|
+
case State.Unsupported:
|
|
25
|
+
return 'unsupported';
|
|
26
|
+
case State.Unauthorized:
|
|
27
|
+
return 'unauthorized';
|
|
28
|
+
case State.PoweredOff:
|
|
29
|
+
return 'poweredOff';
|
|
30
|
+
case State.PoweredOn:
|
|
31
|
+
return 'poweredOn';
|
|
32
|
+
default:
|
|
33
|
+
return 'unknown';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Bota Client class - singleton SDK entry point
|
|
39
|
+
*/
|
|
40
|
+
class BotaClientImpl extends EventEmitter {
|
|
41
|
+
_config = null;
|
|
42
|
+
_state = 'uninitialized';
|
|
43
|
+
_bluetoothState = 'unknown';
|
|
44
|
+
_bleManager = null;
|
|
45
|
+
_deviceManager = null;
|
|
46
|
+
_recordingManager = null;
|
|
47
|
+
_otaManager = null;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get current SDK state
|
|
51
|
+
*/
|
|
52
|
+
get state() {
|
|
53
|
+
return this._state;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get current Bluetooth state
|
|
58
|
+
*/
|
|
59
|
+
get bluetoothState() {
|
|
60
|
+
return this._bluetoothState;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Check if Bluetooth is ready
|
|
65
|
+
*/
|
|
66
|
+
get isBluetoothReady() {
|
|
67
|
+
return this._bluetoothState === 'poweredOn';
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Check if SDK is initialized
|
|
72
|
+
*/
|
|
73
|
+
get isInitialized() {
|
|
74
|
+
return this._state === 'ready';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get current configuration
|
|
79
|
+
*/
|
|
80
|
+
get config() {
|
|
81
|
+
return this._config;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get device manager
|
|
86
|
+
*/
|
|
87
|
+
get devices() {
|
|
88
|
+
if (!this._deviceManager) {
|
|
89
|
+
throw SdkError.notInitialized();
|
|
90
|
+
}
|
|
91
|
+
return this._deviceManager;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Get recording manager
|
|
96
|
+
*/
|
|
97
|
+
get recordings() {
|
|
98
|
+
if (!this._recordingManager) {
|
|
99
|
+
throw SdkError.notInitialized();
|
|
100
|
+
}
|
|
101
|
+
return this._recordingManager;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get OTA manager
|
|
106
|
+
*/
|
|
107
|
+
get ota() {
|
|
108
|
+
if (!this._otaManager) {
|
|
109
|
+
throw SdkError.notInitialized();
|
|
110
|
+
}
|
|
111
|
+
return this._otaManager;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Configure and initialize the SDK
|
|
116
|
+
*/
|
|
117
|
+
async configure(config = {}) {
|
|
118
|
+
if (this._state === 'ready') {
|
|
119
|
+
log.warn('SDK already configured, reconfiguring');
|
|
120
|
+
await this.destroy();
|
|
121
|
+
}
|
|
122
|
+
log.info('Configuring SDK', config);
|
|
123
|
+
this._config = {
|
|
124
|
+
environment: config.environment ?? 'production',
|
|
125
|
+
backgroundSyncEnabled: config.backgroundSyncEnabled ?? true,
|
|
126
|
+
wifiOnlyUpload: config.wifiOnlyUpload ?? false,
|
|
127
|
+
logLevel: config.logLevel ?? 'warn',
|
|
128
|
+
debug: config.debug ?? false
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// Set log level
|
|
132
|
+
logger.setLevel(this._config.logLevel);
|
|
133
|
+
this.setState('initializing');
|
|
134
|
+
try {
|
|
135
|
+
// Initialize BLE manager
|
|
136
|
+
this._bleManager = getBleManager();
|
|
137
|
+
|
|
138
|
+
// Set up Bluetooth state listener
|
|
139
|
+
this._bleManager.on('stateChange', state => {
|
|
140
|
+
const mappedState = mapBluetoothState(state);
|
|
141
|
+
if (mappedState !== this._bluetoothState) {
|
|
142
|
+
this._bluetoothState = mappedState;
|
|
143
|
+
this.emit('bluetoothStateChanged', mappedState);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Get initial Bluetooth state
|
|
148
|
+
const initialState = await this._bleManager.getState();
|
|
149
|
+
this._bluetoothState = mapBluetoothState(initialState);
|
|
150
|
+
|
|
151
|
+
// Initialize managers
|
|
152
|
+
this._deviceManager = new DeviceManager();
|
|
153
|
+
this._deviceManager.initialize();
|
|
154
|
+
this._recordingManager = new RecordingManager();
|
|
155
|
+
await this._recordingManager.initialize();
|
|
156
|
+
this._otaManager = new OTAManager();
|
|
157
|
+
this.setState('ready');
|
|
158
|
+
log.info('SDK configured successfully', {
|
|
159
|
+
environment: this._config.environment,
|
|
160
|
+
bluetoothState: this._bluetoothState
|
|
161
|
+
});
|
|
162
|
+
} catch (error) {
|
|
163
|
+
this.setState('error');
|
|
164
|
+
log.error('Failed to configure SDK', error);
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Wait for Bluetooth to be ready
|
|
171
|
+
*/
|
|
172
|
+
async waitForBluetooth(timeoutMs = 10000) {
|
|
173
|
+
if (!this._bleManager) {
|
|
174
|
+
throw SdkError.notInitialized();
|
|
175
|
+
}
|
|
176
|
+
await this._bleManager.waitForReady(timeoutMs);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Destroy the SDK and clean up resources
|
|
181
|
+
*/
|
|
182
|
+
async destroy() {
|
|
183
|
+
log.info('Destroying SDK');
|
|
184
|
+
this._deviceManager?.destroy();
|
|
185
|
+
this._recordingManager?.destroy();
|
|
186
|
+
this._otaManager?.destroy();
|
|
187
|
+
resetBleManager();
|
|
188
|
+
this._deviceManager = null;
|
|
189
|
+
this._recordingManager = null;
|
|
190
|
+
this._otaManager = null;
|
|
191
|
+
this._bleManager = null;
|
|
192
|
+
this._config = null;
|
|
193
|
+
this.setState('uninitialized');
|
|
194
|
+
this.removeAllListeners();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Set SDK state and emit event
|
|
199
|
+
*/
|
|
200
|
+
setState(state) {
|
|
201
|
+
if (state !== this._state) {
|
|
202
|
+
this._state = state;
|
|
203
|
+
this.emit('stateChanged', state);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Singleton instance
|
|
210
|
+
*/
|
|
211
|
+
export const BotaClient = new BotaClientImpl();
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Export types
|
|
215
|
+
*/
|
|
216
|
+
//# sourceMappingURL=BotaClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["State","EventEmitter","getBleManager","resetBleManager","DeviceManager","RecordingManager","OTAManager","SdkError","logger","log","tag","mapBluetoothState","state","Unknown","Resetting","Unsupported","Unauthorized","PoweredOff","PoweredOn","BotaClientImpl","_config","_state","_bluetoothState","_bleManager","_deviceManager","_recordingManager","_otaManager","bluetoothState","isBluetoothReady","isInitialized","config","devices","notInitialized","recordings","ota","configure","warn","destroy","info","environment","backgroundSyncEnabled","wifiOnlyUpload","logLevel","debug","setLevel","setState","on","mappedState","emit","initialState","getState","initialize","error","waitForBluetooth","timeoutMs","waitForReady","removeAllListeners","BotaClient"],"sourceRoot":"../../src","sources":["BotaClient.ts"],"mappings":"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","ignoreList":[]}
|