@bota-dev/react-native-sdk 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +279 -0
  2. package/lib/commonjs/BotaClient.js +223 -0
  3. package/lib/commonjs/BotaClient.js.map +1 -0
  4. package/lib/commonjs/ble/BleManager.js +494 -0
  5. package/lib/commonjs/ble/BleManager.js.map +1 -0
  6. package/lib/commonjs/ble/constants.js +166 -0
  7. package/lib/commonjs/ble/constants.js.map +1 -0
  8. package/lib/commonjs/ble/index.js +54 -0
  9. package/lib/commonjs/ble/index.js.map +1 -0
  10. package/lib/commonjs/ble/parsers.js +345 -0
  11. package/lib/commonjs/ble/parsers.js.map +1 -0
  12. package/lib/commonjs/index.js +81 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/managers/DeviceManager.js +437 -0
  15. package/lib/commonjs/managers/DeviceManager.js.map +1 -0
  16. package/lib/commonjs/managers/OTAManager.js +227 -0
  17. package/lib/commonjs/managers/OTAManager.js.map +1 -0
  18. package/lib/commonjs/managers/RecordingManager.js +384 -0
  19. package/lib/commonjs/managers/RecordingManager.js.map +1 -0
  20. package/lib/commonjs/managers/index.js +27 -0
  21. package/lib/commonjs/managers/index.js.map +1 -0
  22. package/lib/commonjs/models/Device.js +2 -0
  23. package/lib/commonjs/models/Device.js.map +1 -0
  24. package/lib/commonjs/models/Recording.js +2 -0
  25. package/lib/commonjs/models/Recording.js.map +1 -0
  26. package/lib/commonjs/models/Status.js +6 -0
  27. package/lib/commonjs/models/Status.js.map +1 -0
  28. package/lib/commonjs/models/index.js +39 -0
  29. package/lib/commonjs/models/index.js.map +1 -0
  30. package/lib/commonjs/protocol/ProtocolHandler.js +343 -0
  31. package/lib/commonjs/protocol/ProtocolHandler.js.map +1 -0
  32. package/lib/commonjs/protocol/index.js +13 -0
  33. package/lib/commonjs/protocol/index.js.map +1 -0
  34. package/lib/commonjs/storage/StorageManager.js +333 -0
  35. package/lib/commonjs/storage/StorageManager.js.map +1 -0
  36. package/lib/commonjs/storage/index.js +19 -0
  37. package/lib/commonjs/storage/index.js.map +1 -0
  38. package/lib/commonjs/upload/S3Uploader.js +133 -0
  39. package/lib/commonjs/upload/S3Uploader.js.map +1 -0
  40. package/lib/commonjs/upload/UploadQueue.js +280 -0
  41. package/lib/commonjs/upload/UploadQueue.js.map +1 -0
  42. package/lib/commonjs/upload/index.js +20 -0
  43. package/lib/commonjs/upload/index.js.map +1 -0
  44. package/lib/commonjs/utils/errors.js +187 -0
  45. package/lib/commonjs/utils/errors.js.map +1 -0
  46. package/lib/commonjs/utils/index.js +40 -0
  47. package/lib/commonjs/utils/index.js.map +1 -0
  48. package/lib/commonjs/utils/logger.js +135 -0
  49. package/lib/commonjs/utils/logger.js.map +1 -0
  50. package/lib/commonjs/utils/retry.js +160 -0
  51. package/lib/commonjs/utils/retry.js.map +1 -0
  52. package/lib/module/BotaClient.js +216 -0
  53. package/lib/module/BotaClient.js.map +1 -0
  54. package/lib/module/ble/BleManager.js +484 -0
  55. package/lib/module/ble/BleManager.js.map +1 -0
  56. package/lib/module/ble/constants.js +159 -0
  57. package/lib/module/ble/constants.js.map +1 -0
  58. package/lib/module/ble/index.js +8 -0
  59. package/lib/module/ble/index.js.map +1 -0
  60. package/lib/module/ble/parsers.js +328 -0
  61. package/lib/module/ble/parsers.js.map +1 -0
  62. package/lib/module/index.js +22 -0
  63. package/lib/module/index.js.map +1 -0
  64. package/lib/module/managers/DeviceManager.js +429 -0
  65. package/lib/module/managers/DeviceManager.js.map +1 -0
  66. package/lib/module/managers/OTAManager.js +219 -0
  67. package/lib/module/managers/OTAManager.js.map +1 -0
  68. package/lib/module/managers/RecordingManager.js +376 -0
  69. package/lib/module/managers/RecordingManager.js.map +1 -0
  70. package/lib/module/managers/index.js +8 -0
  71. package/lib/module/managers/index.js.map +1 -0
  72. package/lib/module/models/Device.js +2 -0
  73. package/lib/module/models/Device.js.map +1 -0
  74. package/lib/module/models/Recording.js +2 -0
  75. package/lib/module/models/Recording.js.map +1 -0
  76. package/lib/module/models/Status.js +2 -0
  77. package/lib/module/models/Status.js.map +1 -0
  78. package/lib/module/models/index.js +8 -0
  79. package/lib/module/models/index.js.map +1 -0
  80. package/lib/module/protocol/ProtocolHandler.js +336 -0
  81. package/lib/module/protocol/ProtocolHandler.js.map +1 -0
  82. package/lib/module/protocol/index.js +6 -0
  83. package/lib/module/protocol/index.js.map +1 -0
  84. package/lib/module/storage/StorageManager.js +324 -0
  85. package/lib/module/storage/StorageManager.js.map +1 -0
  86. package/lib/module/storage/index.js +6 -0
  87. package/lib/module/storage/index.js.map +1 -0
  88. package/lib/module/upload/S3Uploader.js +126 -0
  89. package/lib/module/upload/S3Uploader.js.map +1 -0
  90. package/lib/module/upload/UploadQueue.js +272 -0
  91. package/lib/module/upload/UploadQueue.js.map +1 -0
  92. package/lib/module/upload/index.js +7 -0
  93. package/lib/module/upload/index.js.map +1 -0
  94. package/lib/module/utils/errors.js +173 -0
  95. package/lib/module/utils/errors.js.map +1 -0
  96. package/lib/module/utils/index.js +8 -0
  97. package/lib/module/utils/index.js.map +1 -0
  98. package/lib/module/utils/logger.js +129 -0
  99. package/lib/module/utils/logger.js.map +1 -0
  100. package/lib/module/utils/retry.js +149 -0
  101. package/lib/module/utils/retry.js.map +1 -0
  102. package/lib/typescript/src/BotaClient.d.ts +77 -0
  103. package/lib/typescript/src/BotaClient.d.ts.map +1 -0
  104. package/lib/typescript/src/ble/BleManager.d.ts +111 -0
  105. package/lib/typescript/src/ble/BleManager.d.ts.map +1 -0
  106. package/lib/typescript/src/ble/constants.d.ts +111 -0
  107. package/lib/typescript/src/ble/constants.d.ts.map +1 -0
  108. package/lib/typescript/src/ble/index.d.ts +7 -0
  109. package/lib/typescript/src/ble/index.d.ts.map +1 -0
  110. package/lib/typescript/src/ble/parsers.d.ts +100 -0
  111. package/lib/typescript/src/ble/parsers.d.ts.map +1 -0
  112. package/lib/typescript/src/index.d.ts +16 -0
  113. package/lib/typescript/src/index.d.ts.map +1 -0
  114. package/lib/typescript/src/managers/DeviceManager.d.ts +84 -0
  115. package/lib/typescript/src/managers/DeviceManager.d.ts.map +1 -0
  116. package/lib/typescript/src/managers/OTAManager.d.ts +78 -0
  117. package/lib/typescript/src/managers/OTAManager.d.ts.map +1 -0
  118. package/lib/typescript/src/managers/RecordingManager.d.ts +90 -0
  119. package/lib/typescript/src/managers/RecordingManager.d.ts.map +1 -0
  120. package/lib/typescript/src/managers/index.d.ts +7 -0
  121. package/lib/typescript/src/managers/index.d.ts.map +1 -0
  122. package/lib/typescript/src/models/Device.d.ts +139 -0
  123. package/lib/typescript/src/models/Device.d.ts.map +1 -0
  124. package/lib/typescript/src/models/Recording.d.ts +110 -0
  125. package/lib/typescript/src/models/Recording.d.ts.map +1 -0
  126. package/lib/typescript/src/models/Status.d.ts +104 -0
  127. package/lib/typescript/src/models/Status.d.ts.map +1 -0
  128. package/lib/typescript/src/models/index.d.ts +7 -0
  129. package/lib/typescript/src/models/index.d.ts.map +1 -0
  130. package/lib/typescript/src/protocol/ProtocolHandler.d.ts +69 -0
  131. package/lib/typescript/src/protocol/ProtocolHandler.d.ts.map +1 -0
  132. package/lib/typescript/src/protocol/index.d.ts +5 -0
  133. package/lib/typescript/src/protocol/index.d.ts.map +1 -0
  134. package/lib/typescript/src/storage/StorageManager.d.ts +116 -0
  135. package/lib/typescript/src/storage/StorageManager.d.ts.map +1 -0
  136. package/lib/typescript/src/storage/index.d.ts +5 -0
  137. package/lib/typescript/src/storage/index.d.ts.map +1 -0
  138. package/lib/typescript/src/upload/S3Uploader.d.ts +38 -0
  139. package/lib/typescript/src/upload/S3Uploader.d.ts.map +1 -0
  140. package/lib/typescript/src/upload/UploadQueue.d.ts +95 -0
  141. package/lib/typescript/src/upload/UploadQueue.d.ts.map +1 -0
  142. package/lib/typescript/src/upload/index.d.ts +6 -0
  143. package/lib/typescript/src/upload/index.d.ts.map +1 -0
  144. package/lib/typescript/src/utils/errors.d.ts +82 -0
  145. package/lib/typescript/src/utils/errors.d.ts.map +1 -0
  146. package/lib/typescript/src/utils/index.d.ts +7 -0
  147. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  148. package/lib/typescript/src/utils/logger.d.ts +68 -0
  149. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  150. package/lib/typescript/src/utils/retry.d.ts +53 -0
  151. package/lib/typescript/src/utils/retry.d.ts.map +1 -0
  152. package/package.json +95 -0
  153. package/src/BotaClient.ts +238 -0
  154. package/src/ble/BleManager.ts +573 -0
  155. package/src/ble/constants.ts +158 -0
  156. package/src/ble/index.ts +7 -0
  157. package/src/ble/parsers.ts +395 -0
  158. package/src/index.ts +64 -0
  159. package/src/managers/DeviceManager.ts +545 -0
  160. package/src/managers/OTAManager.ts +263 -0
  161. package/src/managers/RecordingManager.ts +434 -0
  162. package/src/managers/index.ts +12 -0
  163. package/src/models/Device.ts +164 -0
  164. package/src/models/Recording.ts +123 -0
  165. package/src/models/Status.ts +126 -0
  166. package/src/models/index.ts +7 -0
  167. package/src/protocol/ProtocolHandler.ts +459 -0
  168. package/src/protocol/index.ts +5 -0
  169. package/src/storage/StorageManager.ts +343 -0
  170. package/src/storage/index.ts +5 -0
  171. package/src/upload/S3Uploader.ts +164 -0
  172. package/src/upload/UploadQueue.ts +310 -0
  173. package/src/upload/index.ts +6 -0
  174. package/src/utils/errors.ts +310 -0
  175. package/src/utils/index.ts +7 -0
  176. package/src/utils/logger.ts +137 -0
  177. package/src/utils/retry.ts +177 -0
@@ -0,0 +1,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":[]}