riuve-rn 1.0.0
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/LICENSE +21 -0
- package/README.md +848 -0
- package/dist/Riuve.d.ts +91 -0
- package/dist/Riuve.d.ts.map +1 -0
- package/dist/Riuve.js +402 -0
- package/dist/Rive.d.ts +91 -0
- package/dist/Rive.d.ts.map +1 -0
- package/dist/Rive.js +402 -0
- package/dist/adapters/deviceInfo/ExpoDeviceInfo.d.ts +13 -0
- package/dist/adapters/deviceInfo/ExpoDeviceInfo.d.ts.map +1 -0
- package/dist/adapters/deviceInfo/ExpoDeviceInfo.js +91 -0
- package/dist/adapters/deviceInfo/FallbackDeviceInfo.d.ts +13 -0
- package/dist/adapters/deviceInfo/FallbackDeviceInfo.d.ts.map +1 -0
- package/dist/adapters/deviceInfo/FallbackDeviceInfo.js +36 -0
- package/dist/adapters/deviceInfo/NativeDeviceInfo.d.ts +17 -0
- package/dist/adapters/deviceInfo/NativeDeviceInfo.d.ts.map +1 -0
- package/dist/adapters/deviceInfo/NativeDeviceInfo.js +83 -0
- package/dist/adapters/deviceInfo/index.d.ts +14 -0
- package/dist/adapters/deviceInfo/index.d.ts.map +1 -0
- package/dist/adapters/deviceInfo/index.js +38 -0
- package/dist/adapters/deviceInfo/types.d.ts +25 -0
- package/dist/adapters/deviceInfo/types.d.ts.map +1 -0
- package/dist/adapters/deviceInfo/types.js +7 -0
- package/dist/adapters/network/ExpoNetworkManager.d.ts +20 -0
- package/dist/adapters/network/ExpoNetworkManager.d.ts.map +1 -0
- package/dist/adapters/network/ExpoNetworkManager.js +114 -0
- package/dist/adapters/network/FallbackNetworkManager.d.ts +15 -0
- package/dist/adapters/network/FallbackNetworkManager.d.ts.map +1 -0
- package/dist/adapters/network/FallbackNetworkManager.js +27 -0
- package/dist/adapters/network/NativeNetworkManager.d.ts +20 -0
- package/dist/adapters/network/NativeNetworkManager.d.ts.map +1 -0
- package/dist/adapters/network/NativeNetworkManager.js +68 -0
- package/dist/adapters/network/index.d.ts +14 -0
- package/dist/adapters/network/index.d.ts.map +1 -0
- package/dist/adapters/network/index.js +38 -0
- package/dist/adapters/network/types.d.ts +28 -0
- package/dist/adapters/network/types.d.ts.map +1 -0
- package/dist/adapters/network/types.js +7 -0
- package/dist/adapters/utils/moduleDetector.d.ts +17 -0
- package/dist/adapters/utils/moduleDetector.d.ts.map +1 -0
- package/dist/adapters/utils/moduleDetector.js +32 -0
- package/dist/constants.d.ts +41 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/core/ApiClient.d.ts +49 -0
- package/dist/core/ApiClient.d.ts.map +1 -0
- package/dist/core/ApiClient.js +184 -0
- package/dist/core/DeviceInfo.d.ts +27 -0
- package/dist/core/DeviceInfo.d.ts.map +1 -0
- package/dist/core/DeviceInfo.js +69 -0
- package/dist/core/EventQueue.d.ts +71 -0
- package/dist/core/EventQueue.d.ts.map +1 -0
- package/dist/core/EventQueue.js +216 -0
- package/dist/core/Storage.d.ts +29 -0
- package/dist/core/Storage.d.ts.map +1 -0
- package/dist/core/Storage.js +88 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/managers/BatchManager.d.ts +50 -0
- package/dist/managers/BatchManager.d.ts.map +1 -0
- package/dist/managers/BatchManager.js +277 -0
- package/dist/managers/IdentityManager.d.ts +47 -0
- package/dist/managers/IdentityManager.d.ts.map +1 -0
- package/dist/managers/IdentityManager.js +135 -0
- package/dist/managers/NetworkManager.d.ts +32 -0
- package/dist/managers/NetworkManager.d.ts.map +1 -0
- package/dist/managers/NetworkManager.js +67 -0
- package/dist/types/api.d.ts +65 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +15 -0
- package/dist/types/config.d.ts +32 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/events.d.ts +63 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +5 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/storage.d.ts +26 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +5 -0
- package/dist/utils/fetchWithTimeout.d.ts +6 -0
- package/dist/utils/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/fetchWithTimeout.js +28 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/retry.d.ts +29 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +78 -0
- package/dist/utils/uuid.d.ts +12 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +27 -0
- package/dist/utils/validators.d.ts +32 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +68 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/deviceInfo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIjD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAyBxD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeviceInfo Adapter Selector
|
|
4
|
+
*
|
|
5
|
+
* Automatically detects available modules and selects the best adapter:
|
|
6
|
+
* 1. NativeDeviceInfo (react-native-device-info) - Best performance & data
|
|
7
|
+
* 2. ExpoDeviceInfo (expo-device, expo-application) - Expo Go compatible
|
|
8
|
+
* 3. FallbackDeviceInfo (Platform API only) - Always works
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.getDeviceInfoAdapter = getDeviceInfoAdapter;
|
|
12
|
+
const moduleDetector_1 = require("../utils/moduleDetector");
|
|
13
|
+
let adapter = null;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the appropriate DeviceInfo adapter for the current environment
|
|
16
|
+
*/
|
|
17
|
+
function getDeviceInfoAdapter() {
|
|
18
|
+
if (adapter) {
|
|
19
|
+
return adapter;
|
|
20
|
+
}
|
|
21
|
+
const modules = (0, moduleDetector_1.detectAvailableModules)();
|
|
22
|
+
// Priority 1: Native adapter (best performance & data)
|
|
23
|
+
if (modules.hasNativeDeviceInfo) {
|
|
24
|
+
const { NativeDeviceInfo } = require('./NativeDeviceInfo');
|
|
25
|
+
adapter = new NativeDeviceInfo();
|
|
26
|
+
return adapter;
|
|
27
|
+
}
|
|
28
|
+
// Priority 2: Expo adapter (Expo Go compatible)
|
|
29
|
+
if (modules.hasExpoDevice) {
|
|
30
|
+
const { ExpoDeviceInfo } = require('./ExpoDeviceInfo');
|
|
31
|
+
adapter = new ExpoDeviceInfo();
|
|
32
|
+
return adapter;
|
|
33
|
+
}
|
|
34
|
+
// Priority 3: Fallback adapter (always works)
|
|
35
|
+
const { FallbackDeviceInfo } = require('./FallbackDeviceInfo');
|
|
36
|
+
adapter = new FallbackDeviceInfo();
|
|
37
|
+
return adapter;
|
|
38
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeviceInfo Adapter Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the interface that all DeviceInfo adapters must implement.
|
|
5
|
+
*/
|
|
6
|
+
export interface DeviceInfoType {
|
|
7
|
+
os_version: string;
|
|
8
|
+
device_model: string;
|
|
9
|
+
app_version: string;
|
|
10
|
+
locale: string;
|
|
11
|
+
platform: 'ios' | 'android';
|
|
12
|
+
manufacturer?: string;
|
|
13
|
+
brand?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DeviceInfoAdapter {
|
|
16
|
+
/**
|
|
17
|
+
* Collect device information
|
|
18
|
+
*/
|
|
19
|
+
collect(): Promise<DeviceInfoType>;
|
|
20
|
+
/**
|
|
21
|
+
* Get cached device information (if available)
|
|
22
|
+
*/
|
|
23
|
+
getCached(): DeviceInfoType | null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/deviceInfo/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAEnC;;OAEG;IACH,SAAS,IAAI,cAAc,GAAG,IAAI,CAAC;CACpC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expo Network Adapter
|
|
3
|
+
*
|
|
4
|
+
* Uses expo-network for network monitoring.
|
|
5
|
+
* Since expo-network doesn't have event listeners, this adapter uses polling.
|
|
6
|
+
*/
|
|
7
|
+
import type { NetworkAdapter } from './types';
|
|
8
|
+
export declare class ExpoNetworkManager implements NetworkAdapter {
|
|
9
|
+
private isOnline;
|
|
10
|
+
private listeners;
|
|
11
|
+
private intervalId;
|
|
12
|
+
private Network;
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
isConnected(): boolean;
|
|
15
|
+
onStatusChange(callback: (isOnline: boolean) => void): void;
|
|
16
|
+
refresh(): Promise<void>;
|
|
17
|
+
cleanup(): void;
|
|
18
|
+
private notifyListeners;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ExpoNetworkManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpoNetworkManager.d.ts","sourceRoot":"","sources":["../../../src/adapters/network/ExpoNetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,OAAO,CAAa;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Expo Network Adapter
|
|
4
|
+
*
|
|
5
|
+
* Uses expo-network for network monitoring.
|
|
6
|
+
* Since expo-network doesn't have event listeners, this adapter uses polling.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.ExpoNetworkManager = void 0;
|
|
43
|
+
class ExpoNetworkManager {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.isOnline = true;
|
|
46
|
+
this.listeners = [];
|
|
47
|
+
this.intervalId = null;
|
|
48
|
+
this.Network = null;
|
|
49
|
+
}
|
|
50
|
+
async initialize() {
|
|
51
|
+
try {
|
|
52
|
+
// Lazy import - only import when this adapter is actually used
|
|
53
|
+
// @ts-ignore - expo modules are optional peer dependencies
|
|
54
|
+
this.Network = await Promise.resolve().then(() => __importStar(require('expo-network')));
|
|
55
|
+
// Check initial network state
|
|
56
|
+
const networkState = await this.Network.getNetworkStateAsync();
|
|
57
|
+
this.isOnline = networkState.isConnected ?? true;
|
|
58
|
+
// Expo Network doesn't have addEventListener, use polling instead
|
|
59
|
+
this.intervalId = setInterval(async () => {
|
|
60
|
+
await this.refresh();
|
|
61
|
+
}, 5000); // Check every 5 seconds
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// If expo-network fails to load, assume online
|
|
65
|
+
this.isOnline = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
isConnected() {
|
|
69
|
+
return this.isOnline;
|
|
70
|
+
}
|
|
71
|
+
onStatusChange(callback) {
|
|
72
|
+
this.listeners.push(callback);
|
|
73
|
+
}
|
|
74
|
+
async refresh() {
|
|
75
|
+
if (!this.Network) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const networkState = await this.Network.getNetworkStateAsync();
|
|
80
|
+
const wasOnline = this.isOnline;
|
|
81
|
+
this.isOnline = networkState.isConnected ?? true;
|
|
82
|
+
if (wasOnline !== this.isOnline) {
|
|
83
|
+
this.notifyListeners();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// If network check fails, assume we're offline
|
|
88
|
+
const wasOnline = this.isOnline;
|
|
89
|
+
this.isOnline = false;
|
|
90
|
+
if (wasOnline !== this.isOnline) {
|
|
91
|
+
this.notifyListeners();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
cleanup() {
|
|
96
|
+
if (this.intervalId) {
|
|
97
|
+
clearInterval(this.intervalId);
|
|
98
|
+
this.intervalId = null;
|
|
99
|
+
}
|
|
100
|
+
this.listeners = [];
|
|
101
|
+
this.Network = null;
|
|
102
|
+
}
|
|
103
|
+
notifyListeners() {
|
|
104
|
+
this.listeners.forEach((callback) => {
|
|
105
|
+
try {
|
|
106
|
+
callback(this.isOnline);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
// Silently catch listener errors
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.ExpoNetworkManager = ExpoNetworkManager;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback Network Adapter
|
|
3
|
+
*
|
|
4
|
+
* Minimal network adapter that always assumes online status.
|
|
5
|
+
* This adapter works in any React Native environment without any dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import type { NetworkAdapter } from './types';
|
|
8
|
+
export declare class FallbackNetworkManager implements NetworkAdapter {
|
|
9
|
+
initialize(): Promise<void>;
|
|
10
|
+
isConnected(): boolean;
|
|
11
|
+
onStatusChange(_callback: (isOnline: boolean) => void): void;
|
|
12
|
+
refresh(): Promise<void>;
|
|
13
|
+
cleanup(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=FallbackNetworkManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FallbackNetworkManager.d.ts","sourceRoot":"","sources":["../../../src/adapters/network/FallbackNetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,qBAAa,sBAAuB,YAAW,cAAc;IACrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAItD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fallback Network Adapter
|
|
4
|
+
*
|
|
5
|
+
* Minimal network adapter that always assumes online status.
|
|
6
|
+
* This adapter works in any React Native environment without any dependencies.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FallbackNetworkManager = void 0;
|
|
10
|
+
class FallbackNetworkManager {
|
|
11
|
+
async initialize() {
|
|
12
|
+
// No-op: Always assume online
|
|
13
|
+
}
|
|
14
|
+
isConnected() {
|
|
15
|
+
return true; // Always return true (assume online)
|
|
16
|
+
}
|
|
17
|
+
onStatusChange(_callback) {
|
|
18
|
+
// No-op: Never triggers callbacks since status never changes
|
|
19
|
+
}
|
|
20
|
+
async refresh() {
|
|
21
|
+
// No-op: Always online
|
|
22
|
+
}
|
|
23
|
+
cleanup() {
|
|
24
|
+
// No-op: Nothing to clean up
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FallbackNetworkManager = FallbackNetworkManager;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Network Adapter
|
|
3
|
+
*
|
|
4
|
+
* Uses @react-native-community/netinfo for network monitoring.
|
|
5
|
+
* This adapter provides real-time network status updates via event listeners.
|
|
6
|
+
*/
|
|
7
|
+
import type { NetworkAdapter } from './types';
|
|
8
|
+
export declare class NativeNetworkManager implements NetworkAdapter {
|
|
9
|
+
private isOnline;
|
|
10
|
+
private listeners;
|
|
11
|
+
private unsubscribe;
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
isConnected(): boolean;
|
|
14
|
+
onStatusChange(callback: (isOnline: boolean) => void): void;
|
|
15
|
+
refresh(): Promise<void>;
|
|
16
|
+
cleanup(): void;
|
|
17
|
+
private handleNetworkChange;
|
|
18
|
+
private notifyListeners;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=NativeNetworkManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeNetworkManager.d.ts","sourceRoot":"","sources":["../../../src/adapters/network/NativeNetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,WAAW,CAA6B;IAE1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Native Network Adapter
|
|
4
|
+
*
|
|
5
|
+
* Uses @react-native-community/netinfo for network monitoring.
|
|
6
|
+
* This adapter provides real-time network status updates via event listeners.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NativeNetworkManager = void 0;
|
|
13
|
+
const netinfo_1 = __importDefault(require("@react-native-community/netinfo"));
|
|
14
|
+
class NativeNetworkManager {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.isOnline = true;
|
|
17
|
+
this.listeners = [];
|
|
18
|
+
this.unsubscribe = null;
|
|
19
|
+
}
|
|
20
|
+
async initialize() {
|
|
21
|
+
// Check initial network state
|
|
22
|
+
const state = await netinfo_1.default.fetch();
|
|
23
|
+
this.isOnline = state.isConnected ?? true;
|
|
24
|
+
// Subscribe to network state changes
|
|
25
|
+
this.unsubscribe = netinfo_1.default.addEventListener((state) => {
|
|
26
|
+
this.handleNetworkChange(state);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
isConnected() {
|
|
30
|
+
return this.isOnline;
|
|
31
|
+
}
|
|
32
|
+
onStatusChange(callback) {
|
|
33
|
+
this.listeners.push(callback);
|
|
34
|
+
}
|
|
35
|
+
async refresh() {
|
|
36
|
+
const state = await netinfo_1.default.fetch();
|
|
37
|
+
const wasOnline = this.isOnline;
|
|
38
|
+
this.isOnline = state.isConnected ?? true;
|
|
39
|
+
if (wasOnline !== this.isOnline) {
|
|
40
|
+
this.notifyListeners();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
cleanup() {
|
|
44
|
+
if (this.unsubscribe) {
|
|
45
|
+
this.unsubscribe();
|
|
46
|
+
this.unsubscribe = null;
|
|
47
|
+
}
|
|
48
|
+
this.listeners = [];
|
|
49
|
+
}
|
|
50
|
+
handleNetworkChange(state) {
|
|
51
|
+
const wasOnline = this.isOnline;
|
|
52
|
+
this.isOnline = state.isConnected ?? true;
|
|
53
|
+
if (wasOnline !== this.isOnline) {
|
|
54
|
+
this.notifyListeners();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
notifyListeners() {
|
|
58
|
+
this.listeners.forEach((callback) => {
|
|
59
|
+
try {
|
|
60
|
+
callback(this.isOnline);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Silently catch listener errors
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.NativeNetworkManager = NativeNetworkManager;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Adapter Selector
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects available modules and selects the best adapter:
|
|
5
|
+
* 1. NativeNetworkManager (@react-native-community/netinfo) - Real-time events
|
|
6
|
+
* 2. ExpoNetworkManager (expo-network) - Expo Go compatible (polling)
|
|
7
|
+
* 3. FallbackNetworkManager (no dependencies) - Always assumes online
|
|
8
|
+
*/
|
|
9
|
+
import type { NetworkAdapter } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Gets the appropriate Network adapter for the current environment
|
|
12
|
+
*/
|
|
13
|
+
export declare function getNetworkAdapter(): NetworkAdapter;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/network/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAyBlD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Network Adapter Selector
|
|
4
|
+
*
|
|
5
|
+
* Automatically detects available modules and selects the best adapter:
|
|
6
|
+
* 1. NativeNetworkManager (@react-native-community/netinfo) - Real-time events
|
|
7
|
+
* 2. ExpoNetworkManager (expo-network) - Expo Go compatible (polling)
|
|
8
|
+
* 3. FallbackNetworkManager (no dependencies) - Always assumes online
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.getNetworkAdapter = getNetworkAdapter;
|
|
12
|
+
const moduleDetector_1 = require("../utils/moduleDetector");
|
|
13
|
+
let adapter = null;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the appropriate Network adapter for the current environment
|
|
16
|
+
*/
|
|
17
|
+
function getNetworkAdapter() {
|
|
18
|
+
if (adapter) {
|
|
19
|
+
return adapter;
|
|
20
|
+
}
|
|
21
|
+
const modules = (0, moduleDetector_1.detectAvailableModules)();
|
|
22
|
+
// Priority 1: Native adapter (real-time network events)
|
|
23
|
+
if (modules.hasNativeNetInfo) {
|
|
24
|
+
const { NativeNetworkManager } = require('./NativeNetworkManager');
|
|
25
|
+
adapter = new NativeNetworkManager();
|
|
26
|
+
return adapter;
|
|
27
|
+
}
|
|
28
|
+
// Priority 2: Expo adapter (Expo Go compatible, uses polling)
|
|
29
|
+
if (modules.hasExpoNetwork) {
|
|
30
|
+
const { ExpoNetworkManager } = require('./ExpoNetworkManager');
|
|
31
|
+
adapter = new ExpoNetworkManager();
|
|
32
|
+
return adapter;
|
|
33
|
+
}
|
|
34
|
+
// Priority 3: Fallback adapter (always assumes online)
|
|
35
|
+
const { FallbackNetworkManager } = require('./FallbackNetworkManager');
|
|
36
|
+
adapter = new FallbackNetworkManager();
|
|
37
|
+
return adapter;
|
|
38
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Adapter Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the interface that all Network adapters must implement.
|
|
5
|
+
*/
|
|
6
|
+
export interface NetworkAdapter {
|
|
7
|
+
/**
|
|
8
|
+
* Initialize the network adapter
|
|
9
|
+
*/
|
|
10
|
+
initialize(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if device is currently connected to the internet
|
|
13
|
+
*/
|
|
14
|
+
isConnected(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Register a callback for network status changes
|
|
17
|
+
*/
|
|
18
|
+
onStatusChange(callback: (isOnline: boolean) => void): void;
|
|
19
|
+
/**
|
|
20
|
+
* Cleanup resources (listeners, intervals, etc.)
|
|
21
|
+
*/
|
|
22
|
+
cleanup(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Manually refresh network status
|
|
25
|
+
*/
|
|
26
|
+
refresh(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/network/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects which native/expo modules are available at runtime.
|
|
5
|
+
* This allows the SDK to select the best adapter implementation automatically.
|
|
6
|
+
*/
|
|
7
|
+
export interface ModuleAvailability {
|
|
8
|
+
hasNativeDeviceInfo: boolean;
|
|
9
|
+
hasExpoDevice: boolean;
|
|
10
|
+
hasNativeNetInfo: boolean;
|
|
11
|
+
hasExpoNetwork: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Detects which modules are available in the current environment
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectAvailableModules(): ModuleAvailability;
|
|
17
|
+
//# sourceMappingURL=moduleDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleDetector.d.ts","sourceRoot":"","sources":["../../../src/adapters/utils/moduleDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,CAO3D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Module Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects which native/expo modules are available at runtime.
|
|
6
|
+
* This allows the SDK to select the best adapter implementation automatically.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.detectAvailableModules = detectAvailableModules;
|
|
10
|
+
/**
|
|
11
|
+
* Detects which modules are available in the current environment
|
|
12
|
+
*/
|
|
13
|
+
function detectAvailableModules() {
|
|
14
|
+
return {
|
|
15
|
+
hasNativeDeviceInfo: canRequire('react-native-device-info'),
|
|
16
|
+
hasExpoDevice: canRequire('expo-device'),
|
|
17
|
+
hasNativeNetInfo: canRequire('@react-native-community/netinfo'),
|
|
18
|
+
hasExpoNetwork: canRequire('expo-network'),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a module can be required (is installed and available)
|
|
23
|
+
*/
|
|
24
|
+
function canRequire(moduleName) {
|
|
25
|
+
try {
|
|
26
|
+
require.resolve(moduleName);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Constants
|
|
3
|
+
*/
|
|
4
|
+
export declare const STORAGE_KEYS: {
|
|
5
|
+
readonly ANONYMOUS_ID: "@riuve/anonymous_id";
|
|
6
|
+
readonly EXTERNAL_USER_ID: "@riuve/external_user_id";
|
|
7
|
+
readonly USER_PROPERTIES: "@riuve/user_properties";
|
|
8
|
+
readonly DEVICE_INFO: "@riuve/device_info";
|
|
9
|
+
readonly FCM_TOKEN: "@riuve/fcm_token";
|
|
10
|
+
readonly EVENT_QUEUE: "@riuve/event_queue";
|
|
11
|
+
readonly FAILED_BATCHES: "@riuve/failed_batches";
|
|
12
|
+
};
|
|
13
|
+
export declare const DEFAULT_CONFIG: {
|
|
14
|
+
readonly batchSize: 10;
|
|
15
|
+
readonly batchTimeout: 30000;
|
|
16
|
+
readonly maxRetries: 3;
|
|
17
|
+
readonly retryDelay: 1000;
|
|
18
|
+
readonly persistEvents: true;
|
|
19
|
+
readonly autoFlushOnBackground: true;
|
|
20
|
+
readonly maxQueueSize: 1000;
|
|
21
|
+
readonly eventRetentionDays: 7;
|
|
22
|
+
readonly requestTimeout: 10000;
|
|
23
|
+
readonly debugMode: false;
|
|
24
|
+
};
|
|
25
|
+
export declare const API_BASE_URL = "https://api.riuve.com";
|
|
26
|
+
export declare const API_ENDPOINTS: {
|
|
27
|
+
readonly INITIALIZE: "/api/sdk/initialize";
|
|
28
|
+
readonly IDENTIFY: "/api/sdk/identify";
|
|
29
|
+
readonly TRACK: "/api/sdk/track";
|
|
30
|
+
readonly FCM_TOKEN: "/api/sdk/fcm-token";
|
|
31
|
+
};
|
|
32
|
+
export declare const ERROR_MESSAGES: {
|
|
33
|
+
readonly NOT_INITIALIZED: "SDK not initialized. Call Riuve.initialize() first.";
|
|
34
|
+
readonly INVALID_API_KEY: "Invalid API key provided.";
|
|
35
|
+
readonly INVALID_EVENT_NAME: "Event name must be a non-empty string.";
|
|
36
|
+
readonly INVALID_USER_ID: "User ID must be a non-empty string.";
|
|
37
|
+
readonly NETWORK_ERROR: "Network request failed.";
|
|
38
|
+
readonly STORAGE_ERROR: "Storage operation failed.";
|
|
39
|
+
readonly QUEUE_FULL: "Event queue is full. Oldest events will be removed.";
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,eAAO,MAAM,YAAY,0BAA0B,CAAC;AAEpD,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SDK Constants
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ERROR_MESSAGES = exports.API_ENDPOINTS = exports.API_BASE_URL = exports.DEFAULT_CONFIG = exports.STORAGE_KEYS = void 0;
|
|
7
|
+
exports.STORAGE_KEYS = {
|
|
8
|
+
ANONYMOUS_ID: '@riuve/anonymous_id',
|
|
9
|
+
EXTERNAL_USER_ID: '@riuve/external_user_id',
|
|
10
|
+
USER_PROPERTIES: '@riuve/user_properties',
|
|
11
|
+
DEVICE_INFO: '@riuve/device_info',
|
|
12
|
+
FCM_TOKEN: '@riuve/fcm_token',
|
|
13
|
+
EVENT_QUEUE: '@riuve/event_queue',
|
|
14
|
+
FAILED_BATCHES: '@riuve/failed_batches',
|
|
15
|
+
};
|
|
16
|
+
exports.DEFAULT_CONFIG = {
|
|
17
|
+
batchSize: 10,
|
|
18
|
+
batchTimeout: 30000, // 30 seconds
|
|
19
|
+
maxRetries: 3,
|
|
20
|
+
retryDelay: 1000, // 1 second
|
|
21
|
+
persistEvents: true,
|
|
22
|
+
autoFlushOnBackground: true,
|
|
23
|
+
maxQueueSize: 1000,
|
|
24
|
+
eventRetentionDays: 7,
|
|
25
|
+
requestTimeout: 10000, // 10 seconds API request timeout
|
|
26
|
+
debugMode: false, // Disabled by default (only WARN and ERROR)
|
|
27
|
+
};
|
|
28
|
+
exports.API_BASE_URL = 'https://api.riuve.com';
|
|
29
|
+
exports.API_ENDPOINTS = {
|
|
30
|
+
INITIALIZE: '/api/sdk/initialize',
|
|
31
|
+
IDENTIFY: '/api/sdk/identify',
|
|
32
|
+
TRACK: '/api/sdk/track',
|
|
33
|
+
FCM_TOKEN: '/api/sdk/fcm-token',
|
|
34
|
+
};
|
|
35
|
+
exports.ERROR_MESSAGES = {
|
|
36
|
+
NOT_INITIALIZED: 'SDK not initialized. Call Riuve.initialize() first.',
|
|
37
|
+
INVALID_API_KEY: 'Invalid API key provided.',
|
|
38
|
+
INVALID_EVENT_NAME: 'Event name must be a non-empty string.',
|
|
39
|
+
INVALID_USER_ID: 'User ID must be a non-empty string.',
|
|
40
|
+
NETWORK_ERROR: 'Network request failed.',
|
|
41
|
+
STORAGE_ERROR: 'Storage operation failed.',
|
|
42
|
+
QUEUE_FULL: 'Event queue is full. Oldest events will be removed.',
|
|
43
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client - Handles HTTP requests with retry logic
|
|
3
|
+
*/
|
|
4
|
+
import type { InitializeRequest, InitializeResponse, IdentifyRequest, IdentifyResponse, TrackRequest, TrackResponse, SetFcmTokenRequest, SetFcmTokenResponse } from '../types';
|
|
5
|
+
export declare class ApiClient {
|
|
6
|
+
private baseUrl;
|
|
7
|
+
private apiKey;
|
|
8
|
+
private maxRetries;
|
|
9
|
+
private retryDelay;
|
|
10
|
+
private timeout;
|
|
11
|
+
constructor(baseUrl: string, apiKey: string, maxRetries: number, retryDelay: number, timeout?: number);
|
|
12
|
+
/**
|
|
13
|
+
* Updates the API client configuration
|
|
14
|
+
*/
|
|
15
|
+
updateConfig(baseUrl: string, apiKey: string, maxRetries: number, retryDelay: number, timeout?: number): void;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize endpoint
|
|
18
|
+
*/
|
|
19
|
+
initialize(request: Omit<InitializeRequest, 'api_key'>): Promise<InitializeResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Identify endpoint
|
|
22
|
+
*/
|
|
23
|
+
identify(request: Omit<IdentifyRequest, 'api_key'>): Promise<IdentifyResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Track endpoint
|
|
26
|
+
*/
|
|
27
|
+
track(request: Omit<TrackRequest, 'api_key'>): Promise<TrackResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Set FCM token endpoint
|
|
30
|
+
*/
|
|
31
|
+
setFcmToken(request: Omit<SetFcmTokenRequest, 'api_key'>): Promise<SetFcmTokenResponse>;
|
|
32
|
+
/**
|
|
33
|
+
* Generic POST request with retry logic
|
|
34
|
+
*/
|
|
35
|
+
private post;
|
|
36
|
+
/**
|
|
37
|
+
* Makes the actual HTTP request
|
|
38
|
+
*/
|
|
39
|
+
private makeRequest;
|
|
40
|
+
/**
|
|
41
|
+
* Parses error response from API
|
|
42
|
+
*/
|
|
43
|
+
private parseErrorResponse;
|
|
44
|
+
/**
|
|
45
|
+
* Classifies an error into an ErrorType
|
|
46
|
+
*/
|
|
47
|
+
private classifyError;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ApiClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/core/ApiClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAMlB,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAGtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAc;IASzB;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAc,GACtB,IAAI;IAQP;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAO1F;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOpF;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAO3E;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO7F;;OAEG;YACW,IAAI;IAclB;;OAEG;YACW,WAAW;IA6EzB;;OAEG;YACW,kBAAkB;IAiBhC;;OAEG;IACH,OAAO,CAAC,aAAa;CAwBtB"}
|