@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,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility for the Bota SDK
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const LOG_LEVELS = {
|
|
6
|
+
debug: 0,
|
|
7
|
+
info: 1,
|
|
8
|
+
warn: 2,
|
|
9
|
+
error: 3,
|
|
10
|
+
none: 4
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Logger class with configurable log levels
|
|
15
|
+
*/
|
|
16
|
+
class Logger {
|
|
17
|
+
level = 'warn';
|
|
18
|
+
prefix = '[BotaSDK]';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Set the log level
|
|
22
|
+
*/
|
|
23
|
+
setLevel(level) {
|
|
24
|
+
this.level = level;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get the current log level
|
|
29
|
+
*/
|
|
30
|
+
getLevel() {
|
|
31
|
+
return this.level;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Check if a log level should be output
|
|
36
|
+
*/
|
|
37
|
+
shouldLog(level) {
|
|
38
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Format a log message with optional context
|
|
43
|
+
*/
|
|
44
|
+
format(level, message, context) {
|
|
45
|
+
const timestamp = new Date().toISOString();
|
|
46
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
47
|
+
return `${timestamp} ${this.prefix} [${level.toUpperCase()}] ${message}${contextStr}`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Log a debug message
|
|
52
|
+
*/
|
|
53
|
+
debug(message, context) {
|
|
54
|
+
if (this.shouldLog('debug')) {
|
|
55
|
+
console.debug(this.format('debug', message, context));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Log an info message
|
|
61
|
+
*/
|
|
62
|
+
info(message, context) {
|
|
63
|
+
if (this.shouldLog('info')) {
|
|
64
|
+
console.info(this.format('info', message, context));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Log a warning message
|
|
70
|
+
*/
|
|
71
|
+
warn(message, context) {
|
|
72
|
+
if (this.shouldLog('warn')) {
|
|
73
|
+
console.warn(this.format('warn', message, context));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Log an error message
|
|
79
|
+
*/
|
|
80
|
+
error(message, error, context) {
|
|
81
|
+
if (this.shouldLog('error')) {
|
|
82
|
+
const fullContext = error ? {
|
|
83
|
+
...context,
|
|
84
|
+
error: error.message,
|
|
85
|
+
stack: error.stack
|
|
86
|
+
} : context;
|
|
87
|
+
console.error(this.format('error', message, fullContext));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Create a child logger with a specific tag
|
|
93
|
+
*/
|
|
94
|
+
tag(tag) {
|
|
95
|
+
return new TaggedLogger(this, tag);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Tagged logger for component-specific logging
|
|
101
|
+
*/
|
|
102
|
+
class TaggedLogger {
|
|
103
|
+
constructor(parent, tag) {
|
|
104
|
+
this.parent = parent;
|
|
105
|
+
this.tag = tag;
|
|
106
|
+
}
|
|
107
|
+
debug(message, context) {
|
|
108
|
+
this.parent.debug(`[${this.tag}] ${message}`, context);
|
|
109
|
+
}
|
|
110
|
+
info(message, context) {
|
|
111
|
+
this.parent.info(`[${this.tag}] ${message}`, context);
|
|
112
|
+
}
|
|
113
|
+
warn(message, context) {
|
|
114
|
+
this.parent.warn(`[${this.tag}] ${message}`, context);
|
|
115
|
+
}
|
|
116
|
+
error(message, error, context) {
|
|
117
|
+
this.parent.error(`[${this.tag}] ${message}`, error, context);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Singleton logger instance
|
|
123
|
+
*/
|
|
124
|
+
export const logger = new Logger();
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Export types for external use
|
|
128
|
+
*/
|
|
129
|
+
//# 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"],"sourceRoot":"../../../src","sources":["utils/logger.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry utility with exponential backoff
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { logger } from './logger';
|
|
6
|
+
const log = logger.tag('Retry');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Retry configuration options
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Default retry delays based on Bota spec:
|
|
14
|
+
* Attempt 1: Immediate
|
|
15
|
+
* Attempt 2: 30 seconds
|
|
16
|
+
* Attempt 3: 2 minutes
|
|
17
|
+
* Attempt 4: 10 minutes
|
|
18
|
+
* Attempt 5: 1 hour
|
|
19
|
+
* Attempt 6: 4 hours
|
|
20
|
+
*/
|
|
21
|
+
export const DEFAULT_RETRY_DELAYS = [0,
|
|
22
|
+
// Immediate
|
|
23
|
+
30 * 1000,
|
|
24
|
+
// 30 seconds
|
|
25
|
+
2 * 60 * 1000,
|
|
26
|
+
// 2 minutes
|
|
27
|
+
10 * 60 * 1000,
|
|
28
|
+
// 10 minutes
|
|
29
|
+
60 * 60 * 1000,
|
|
30
|
+
// 1 hour
|
|
31
|
+
4 * 60 * 60 * 1000 // 4 hours
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Calculate delay for a retry attempt using exponential backoff
|
|
36
|
+
*/
|
|
37
|
+
export function calculateDelay(attempt, options = {}) {
|
|
38
|
+
const {
|
|
39
|
+
baseDelayMs = 1000,
|
|
40
|
+
maxDelayMs = 14400000,
|
|
41
|
+
backoffMultiplier = 2,
|
|
42
|
+
jitter = true
|
|
43
|
+
} = options;
|
|
44
|
+
|
|
45
|
+
// Use predefined delays for upload retries
|
|
46
|
+
if (attempt < DEFAULT_RETRY_DELAYS.length) {
|
|
47
|
+
const delay = DEFAULT_RETRY_DELAYS[attempt];
|
|
48
|
+
if (jitter && delay > 0) {
|
|
49
|
+
// Add up to 10% jitter
|
|
50
|
+
return delay + Math.random() * delay * 0.1;
|
|
51
|
+
}
|
|
52
|
+
return delay;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Fall back to exponential backoff for additional retries
|
|
56
|
+
let delay = baseDelayMs * Math.pow(backoffMultiplier, attempt);
|
|
57
|
+
delay = Math.min(delay, maxDelayMs);
|
|
58
|
+
if (jitter) {
|
|
59
|
+
// Add up to 10% jitter
|
|
60
|
+
delay = delay + Math.random() * delay * 0.1;
|
|
61
|
+
}
|
|
62
|
+
return Math.floor(delay);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Sleep for a specified duration
|
|
67
|
+
*/
|
|
68
|
+
export function sleep(ms) {
|
|
69
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Execute a function with retry logic
|
|
74
|
+
*/
|
|
75
|
+
export async function withRetry(fn, options = {}) {
|
|
76
|
+
const {
|
|
77
|
+
maxAttempts = 6,
|
|
78
|
+
onRetry,
|
|
79
|
+
isRetryable = () => true
|
|
80
|
+
} = options;
|
|
81
|
+
let lastError;
|
|
82
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
83
|
+
try {
|
|
84
|
+
return await fn();
|
|
85
|
+
} catch (error) {
|
|
86
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
87
|
+
|
|
88
|
+
// Check if error is retryable
|
|
89
|
+
if (!isRetryable(lastError)) {
|
|
90
|
+
log.debug('Error is not retryable, throwing immediately', {
|
|
91
|
+
attempt,
|
|
92
|
+
error: lastError.message
|
|
93
|
+
});
|
|
94
|
+
throw lastError;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Check if we have more attempts
|
|
98
|
+
if (attempt >= maxAttempts - 1) {
|
|
99
|
+
log.warn('Max retry attempts reached', {
|
|
100
|
+
attempt: attempt + 1,
|
|
101
|
+
maxAttempts,
|
|
102
|
+
error: lastError.message
|
|
103
|
+
});
|
|
104
|
+
throw lastError;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Calculate delay
|
|
108
|
+
const delayMs = calculateDelay(attempt, options);
|
|
109
|
+
log.debug('Retrying after error', {
|
|
110
|
+
attempt: attempt + 1,
|
|
111
|
+
maxAttempts,
|
|
112
|
+
delayMs,
|
|
113
|
+
error: lastError.message
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Notify callback
|
|
117
|
+
if (onRetry) {
|
|
118
|
+
onRetry(attempt + 1, lastError, delayMs);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Wait before retrying
|
|
122
|
+
if (delayMs > 0) {
|
|
123
|
+
await sleep(delayMs);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// This should never be reached, but TypeScript needs it
|
|
129
|
+
throw lastError ?? new Error('Retry failed');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Create a retryable wrapper for a function
|
|
134
|
+
*/
|
|
135
|
+
export function makeRetryable(fn, options = {}) {
|
|
136
|
+
return async (...args) => {
|
|
137
|
+
return withRetry(() => fn(...args), options);
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Check if we should continue retrying based on total time elapsed
|
|
143
|
+
*/
|
|
144
|
+
export function shouldContinueRetrying(startTime, maxDurationMs = 24 * 60 * 60 * 1000 // 24 hours
|
|
145
|
+
) {
|
|
146
|
+
const elapsed = Date.now() - startTime.getTime();
|
|
147
|
+
return elapsed < maxDurationMs;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["logger","log","tag","DEFAULT_RETRY_DELAYS","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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bota Client - Main entry point for the Bota React Native SDK
|
|
3
|
+
*/
|
|
4
|
+
import EventEmitter from 'eventemitter3';
|
|
5
|
+
import { DeviceManager } from './managers/DeviceManager';
|
|
6
|
+
import { RecordingManager } from './managers/RecordingManager';
|
|
7
|
+
import { OTAManager } from './managers/OTAManager';
|
|
8
|
+
import type { BotaConfig, SdkState, BluetoothState, BotaClientEvents } from './models/Status';
|
|
9
|
+
/**
|
|
10
|
+
* Bota Client class - singleton SDK entry point
|
|
11
|
+
*/
|
|
12
|
+
declare class BotaClientImpl extends EventEmitter<BotaClientEvents> {
|
|
13
|
+
private _config;
|
|
14
|
+
private _state;
|
|
15
|
+
private _bluetoothState;
|
|
16
|
+
private _bleManager;
|
|
17
|
+
private _deviceManager;
|
|
18
|
+
private _recordingManager;
|
|
19
|
+
private _otaManager;
|
|
20
|
+
/**
|
|
21
|
+
* Get current SDK state
|
|
22
|
+
*/
|
|
23
|
+
get state(): SdkState;
|
|
24
|
+
/**
|
|
25
|
+
* Get current Bluetooth state
|
|
26
|
+
*/
|
|
27
|
+
get bluetoothState(): BluetoothState;
|
|
28
|
+
/**
|
|
29
|
+
* Check if Bluetooth is ready
|
|
30
|
+
*/
|
|
31
|
+
get isBluetoothReady(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if SDK is initialized
|
|
34
|
+
*/
|
|
35
|
+
get isInitialized(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get current configuration
|
|
38
|
+
*/
|
|
39
|
+
get config(): BotaConfig | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get device manager
|
|
42
|
+
*/
|
|
43
|
+
get devices(): DeviceManager;
|
|
44
|
+
/**
|
|
45
|
+
* Get recording manager
|
|
46
|
+
*/
|
|
47
|
+
get recordings(): RecordingManager;
|
|
48
|
+
/**
|
|
49
|
+
* Get OTA manager
|
|
50
|
+
*/
|
|
51
|
+
get ota(): OTAManager;
|
|
52
|
+
/**
|
|
53
|
+
* Configure and initialize the SDK
|
|
54
|
+
*/
|
|
55
|
+
configure(config?: BotaConfig): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Wait for Bluetooth to be ready
|
|
58
|
+
*/
|
|
59
|
+
waitForBluetooth(timeoutMs?: number): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Destroy the SDK and clean up resources
|
|
62
|
+
*/
|
|
63
|
+
destroy(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Set SDK state and emit event
|
|
66
|
+
*/
|
|
67
|
+
private setState;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Singleton instance
|
|
71
|
+
*/
|
|
72
|
+
export declare const BotaClient: BotaClientImpl;
|
|
73
|
+
/**
|
|
74
|
+
* Export types
|
|
75
|
+
*/
|
|
76
|
+
export type { BotaConfig, SdkState, BluetoothState };
|
|
77
|
+
//# sourceMappingURL=BotaClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BotaClient.d.ts","sourceRoot":"","sources":["../../../src/BotaClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AA4BzB;;GAEG;AACH,cAAM,cAAe,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IACzD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,WAAW,CAA2B;IAE9C;;OAEG;IACH,IAAI,KAAK,IAAI,QAAQ,CAEpB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAK3B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,gBAAgB,CAKjC;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,UAAU,CAKpB;IAED;;OAEG;IACG,SAAS,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DvD;;OAEG;IACG,gBAAgB,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B;;OAEG;IACH,OAAO,CAAC,QAAQ;CAMjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,gBAAuB,CAAC;AAE/C;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BLE Manager - Abstraction layer over react-native-ble-plx
|
|
3
|
+
*/
|
|
4
|
+
import { Device, State, Subscription } from 'react-native-ble-plx';
|
|
5
|
+
import { Buffer } from 'buffer';
|
|
6
|
+
import EventEmitter from 'eventemitter3';
|
|
7
|
+
import type { DiscoveredDevice, ScanOptions } from '../models/Device';
|
|
8
|
+
/**
|
|
9
|
+
* Events emitted by BleManager
|
|
10
|
+
*/
|
|
11
|
+
interface BleManagerEvents {
|
|
12
|
+
stateChange: (state: State) => void;
|
|
13
|
+
deviceDiscovered: (device: DiscoveredDevice) => void;
|
|
14
|
+
deviceConnected: (deviceId: string) => void;
|
|
15
|
+
deviceDisconnected: (deviceId: string, error?: Error) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* BLE Manager class - singleton wrapper around react-native-ble-plx
|
|
19
|
+
*/
|
|
20
|
+
export declare class BleManager extends EventEmitter<BleManagerEvents> {
|
|
21
|
+
private manager;
|
|
22
|
+
private stateSubscription;
|
|
23
|
+
private disconnectSubscriptions;
|
|
24
|
+
private connectedDevices;
|
|
25
|
+
private discoveredDevices;
|
|
26
|
+
private isScanning;
|
|
27
|
+
private cachedState;
|
|
28
|
+
constructor();
|
|
29
|
+
/**
|
|
30
|
+
* Set up Bluetooth state change listener
|
|
31
|
+
*/
|
|
32
|
+
private setupStateListener;
|
|
33
|
+
/**
|
|
34
|
+
* Get current Bluetooth state
|
|
35
|
+
*/
|
|
36
|
+
getState(): Promise<State>;
|
|
37
|
+
/**
|
|
38
|
+
* Get cached Bluetooth state (synchronous)
|
|
39
|
+
*/
|
|
40
|
+
getCachedState(): State;
|
|
41
|
+
/**
|
|
42
|
+
* Check if Bluetooth is ready for operations
|
|
43
|
+
*/
|
|
44
|
+
isReady(): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Wait for Bluetooth to be ready
|
|
47
|
+
*/
|
|
48
|
+
waitForReady(timeoutMs?: number): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Start scanning for Bota devices
|
|
51
|
+
*/
|
|
52
|
+
startScan(options?: ScanOptions): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Stop scanning for devices
|
|
55
|
+
*/
|
|
56
|
+
stopScan(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get list of discovered devices
|
|
59
|
+
*/
|
|
60
|
+
getDiscoveredDevices(): DiscoveredDevice[];
|
|
61
|
+
/**
|
|
62
|
+
* Parse a discovered device from BLE advertisement data
|
|
63
|
+
*/
|
|
64
|
+
private parseDiscoveredDevice;
|
|
65
|
+
/**
|
|
66
|
+
* Connect to a device
|
|
67
|
+
*/
|
|
68
|
+
connect(deviceId: string): Promise<Device>;
|
|
69
|
+
/**
|
|
70
|
+
* Disconnect from a device
|
|
71
|
+
*/
|
|
72
|
+
disconnect(deviceId: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Check if a device is connected
|
|
75
|
+
*/
|
|
76
|
+
isConnected(deviceId: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get a connected device
|
|
79
|
+
*/
|
|
80
|
+
getConnectedDevice(deviceId: string): Device | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Get negotiated MTU for a device
|
|
83
|
+
*/
|
|
84
|
+
getMtu(deviceId: string): Promise<number>;
|
|
85
|
+
/**
|
|
86
|
+
* Read a characteristic value
|
|
87
|
+
*/
|
|
88
|
+
readCharacteristic(deviceId: string, serviceUuid: string, characteristicUuid: string): Promise<Buffer>;
|
|
89
|
+
/**
|
|
90
|
+
* Write a characteristic value
|
|
91
|
+
*/
|
|
92
|
+
writeCharacteristic(deviceId: string, serviceUuid: string, characteristicUuid: string, data: Buffer, withResponse?: boolean): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Subscribe to characteristic notifications
|
|
95
|
+
*/
|
|
96
|
+
subscribeToCharacteristic(deviceId: string, serviceUuid: string, characteristicUuid: string, onData: (data: Buffer) => void, onError?: (error: Error) => void): Subscription;
|
|
97
|
+
/**
|
|
98
|
+
* Destroy the BLE manager and clean up resources
|
|
99
|
+
*/
|
|
100
|
+
destroy(): void;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get or create the BLE manager singleton
|
|
104
|
+
*/
|
|
105
|
+
export declare function getBleManager(): BleManager;
|
|
106
|
+
/**
|
|
107
|
+
* Reset the BLE manager singleton (for testing)
|
|
108
|
+
*/
|
|
109
|
+
export declare function resetBleManager(): void;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=BleManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../../../../src/ble/BleManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BLE Service and Characteristic UUIDs for Bota devices
|
|
3
|
+
* Based on Device-App Protocol specification
|
|
4
|
+
*/
|
|
5
|
+
export declare const SERVICE_DEVICE_INFO = "180A";
|
|
6
|
+
export declare const SERVICE_BATTERY = "180F";
|
|
7
|
+
export declare const SERVICE_NORDIC_DFU = "FE59";
|
|
8
|
+
export declare const SERVICE_BOTA_AUDIO = "B07A0001-0000-1000-8000-00805F9B34FB";
|
|
9
|
+
export declare const SERVICE_BOTA_CONTROL = "B07A0002-0000-1000-8000-00805F9B34FB";
|
|
10
|
+
export declare const SERVICE_BOTA_PROVISIONING = "B07A0003-0000-1000-8000-00805F9B34FB";
|
|
11
|
+
export declare const SERVICE_BOTA_STORAGE = "B07A0004-0000-1000-8000-00805F9B34FB";
|
|
12
|
+
export declare const CHAR_MANUFACTURER_NAME = "2A29";
|
|
13
|
+
export declare const CHAR_MODEL_NUMBER = "2A24";
|
|
14
|
+
export declare const CHAR_SERIAL_NUMBER = "2A25";
|
|
15
|
+
export declare const CHAR_HARDWARE_REVISION = "2A27";
|
|
16
|
+
export declare const CHAR_FIRMWARE_REVISION = "2A26";
|
|
17
|
+
export declare const CHAR_BATTERY_LEVEL = "2A19";
|
|
18
|
+
export declare const CHAR_AUDIO_DATA = "B07A0001-0001-1000-8000-00805F9B34FB";
|
|
19
|
+
export declare const CHAR_AUDIO_CODEC = "B07A0001-0002-1000-8000-00805F9B34FB";
|
|
20
|
+
export declare const CHAR_AUDIO_CONTROL = "B07A0001-0003-1000-8000-00805F9B34FB";
|
|
21
|
+
export declare const CHAR_DEVICE_STATUS = "B07A0002-0001-1000-8000-00805F9B34FB";
|
|
22
|
+
export declare const CHAR_RECORDING_CONTROL = "B07A0002-0002-1000-8000-00805F9B34FB";
|
|
23
|
+
export declare const CHAR_RECORDING_STATUS = "B07A0002-0003-1000-8000-00805F9B34FB";
|
|
24
|
+
export declare const CHAR_TIME_SYNC = "B07A0002-0004-1000-8000-00805F9B34FB";
|
|
25
|
+
export declare const CHAR_DEVICE_COMMAND = "B07A0002-0005-1000-8000-00805F9B34FB";
|
|
26
|
+
export declare const CHAR_PAIRING_STATE = "B07A0003-0001-1000-8000-00805F9B34FB";
|
|
27
|
+
export declare const CHAR_DEVICE_TOKEN = "B07A0003-0002-1000-8000-00805F9B34FB";
|
|
28
|
+
export declare const CHAR_API_ENDPOINT = "B07A0003-0003-1000-8000-00805F9B34FB";
|
|
29
|
+
export declare const CHAR_WIFI_CONFIG = "B07A0003-0004-1000-8000-00805F9B34FB";
|
|
30
|
+
export declare const CHAR_PROVISIONING_RESULT = "B07A0003-0005-1000-8000-00805F9B34FB";
|
|
31
|
+
export declare const CHAR_STORAGE_INFO = "B07A0004-0001-1000-8000-00805F9B34FB";
|
|
32
|
+
export declare const CHAR_RECORDING_LIST = "B07A0004-0002-1000-8000-00805F9B34FB";
|
|
33
|
+
export declare const CHAR_RECORDING_TRANSFER = "B07A0004-0003-1000-8000-00805F9B34FB";
|
|
34
|
+
export declare const CHAR_TRANSFER_CONTROL = "B07A0004-0004-1000-8000-00805F9B34FB";
|
|
35
|
+
export declare const CHAR_TRANSFER_STATUS = "B07A0004-0005-1000-8000-00805F9B34FB";
|
|
36
|
+
export declare const DEVICE_NAME_PREFIX = "Bota-";
|
|
37
|
+
export declare const DEVICE_NAME_PREFIX_PIN = "Bota-Pin-";
|
|
38
|
+
export declare const DEVICE_NAME_PREFIX_PIN_4G = "Bota-Pin4G-";
|
|
39
|
+
export declare const DEVICE_NAME_PREFIX_NOTE = "Bota-Note-";
|
|
40
|
+
export declare const MFG_DATA_DEVICE_TYPE = 0;
|
|
41
|
+
export declare const MFG_DATA_FW_MAJOR = 1;
|
|
42
|
+
export declare const MFG_DATA_FW_MINOR = 2;
|
|
43
|
+
export declare const MFG_DATA_PAIRING_STATE = 3;
|
|
44
|
+
export declare const MFG_DATA_BATTERY = 4;
|
|
45
|
+
export declare const DEVICE_TYPE_PIN = 1;
|
|
46
|
+
export declare const DEVICE_TYPE_PIN_4G = 2;
|
|
47
|
+
export declare const DEVICE_TYPE_NOTE = 3;
|
|
48
|
+
export declare const PAIRING_STATE_UNPAIRED = 0;
|
|
49
|
+
export declare const PAIRING_STATE_PAIRING = 1;
|
|
50
|
+
export declare const PAIRING_STATE_PAIRED = 2;
|
|
51
|
+
export declare const PAIRING_STATE_ERROR = 3;
|
|
52
|
+
export declare const PROVISIONING_SUCCESS = 0;
|
|
53
|
+
export declare const PROVISIONING_INVALID_TOKEN = 1;
|
|
54
|
+
export declare const PROVISIONING_STORAGE_ERROR = 2;
|
|
55
|
+
export declare const PROVISIONING_CHUNK_ERROR = 3;
|
|
56
|
+
export declare const API_ENDPOINT_PRODUCTION = 0;
|
|
57
|
+
export declare const API_ENDPOINT_SANDBOX = 1;
|
|
58
|
+
export declare const TRANSFER_CMD_LIST = 1;
|
|
59
|
+
export declare const TRANSFER_CMD_START = 2;
|
|
60
|
+
export declare const TRANSFER_CMD_CONFIRM_SYNC = 7;
|
|
61
|
+
export declare const PACKET_TYPE_DATA = 1;
|
|
62
|
+
export declare const PACKET_TYPE_EOF = 2;
|
|
63
|
+
export declare const PACKET_TYPE_ERROR = 255;
|
|
64
|
+
export declare const ACK_TYPE_ACK = 16;
|
|
65
|
+
export declare const ACK_TYPE_NACK = 17;
|
|
66
|
+
export declare const ACK_TYPE_ABORT = 18;
|
|
67
|
+
export declare const DEVICE_CMD_ENTER_DFU = 3;
|
|
68
|
+
export declare const DEVICE_STATE_IDLE = 0;
|
|
69
|
+
export declare const DEVICE_STATE_RECORDING = 1;
|
|
70
|
+
export declare const DEVICE_STATE_SYNCING = 2;
|
|
71
|
+
export declare const DEVICE_STATE_UPLOADING = 3;
|
|
72
|
+
export declare const DEVICE_STATE_CHARGING = 4;
|
|
73
|
+
export declare const DEVICE_STATE_LOW_BATTERY = 5;
|
|
74
|
+
export declare const DEVICE_STATE_STORAGE_FULL = 6;
|
|
75
|
+
export declare const DEVICE_STATE_ERROR = 255;
|
|
76
|
+
export declare const FLAG_CHARGING: number;
|
|
77
|
+
export declare const FLAG_USB_CONNECTED: number;
|
|
78
|
+
export declare const FLAG_LOW_BATTERY: number;
|
|
79
|
+
export declare const FLAG_CRITICAL_BATTERY: number;
|
|
80
|
+
export declare const FLAG_STORAGE_WARNING: number;
|
|
81
|
+
export declare const FLAG_STORAGE_FULL: number;
|
|
82
|
+
export declare const FLAG_CELLULAR_AVAILABLE: number;
|
|
83
|
+
export declare const FLAG_CELLULAR_ROAMING: number;
|
|
84
|
+
export declare const FLAG_WIFI_CONNECTED: number;
|
|
85
|
+
export declare const FLAG_RECORDING_ACTIVE: number;
|
|
86
|
+
export declare const FLAG_SYNC_REQUIRED: number;
|
|
87
|
+
export declare const FLAG_UPDATE_AVAILABLE: number;
|
|
88
|
+
export declare const CODEC_PCM_16K = 0;
|
|
89
|
+
export declare const CODEC_PCM_8K = 1;
|
|
90
|
+
export declare const CODEC_OPUS_16K = 16;
|
|
91
|
+
export declare const CODEC_OPUS_8K = 17;
|
|
92
|
+
export declare const BLE_ERROR_SUCCESS = 0;
|
|
93
|
+
export declare const BLE_ERROR_INVALID_COMMAND = 1;
|
|
94
|
+
export declare const BLE_ERROR_INVALID_STATE = 2;
|
|
95
|
+
export declare const BLE_ERROR_INVALID_PARAMETER = 3;
|
|
96
|
+
export declare const BLE_ERROR_STORAGE_FULL = 16;
|
|
97
|
+
export declare const BLE_ERROR_RECORDING_NOT_FOUND = 17;
|
|
98
|
+
export declare const BLE_ERROR_TRANSFER_FAILED = 18;
|
|
99
|
+
export declare const BLE_ERROR_TOKEN_INVALID = 32;
|
|
100
|
+
export declare const BLE_ERROR_TOKEN_EXPIRED = 33;
|
|
101
|
+
export declare const BLE_ERROR_NETWORK_ERROR = 48;
|
|
102
|
+
export declare const BLE_ERROR_UPLOAD_FAILED = 49;
|
|
103
|
+
export declare const BLE_ERROR_UNKNOWN = 255;
|
|
104
|
+
export declare const SCAN_TIMEOUT = 30000;
|
|
105
|
+
export declare const CONNECTION_TIMEOUT = 30000;
|
|
106
|
+
export declare const OPERATION_TIMEOUT = 10000;
|
|
107
|
+
export declare const TRANSFER_PACKET_TIMEOUT = 2000;
|
|
108
|
+
export declare const TRANSFER_WINDOW_SIZE = 4;
|
|
109
|
+
export declare const DEFAULT_MTU = 23;
|
|
110
|
+
export declare const MAX_MTU = 512;
|
|
111
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/ble/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ble/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|