riuve-rn 1.0.5 → 1.0.6
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 +39 -5
- package/dist/Riuve.d.ts.map +1 -1
- package/dist/Riuve.js +23 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,14 +55,24 @@ or
|
|
|
55
55
|
yarn add riuve-rn
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
### 2. Install
|
|
58
|
+
### 2. Install a Storage Backend
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
The SDK needs a storage backend for persisting events and user data. Choose **one** of the following:
|
|
61
|
+
|
|
62
|
+
**Option A: AsyncStorage (default)**
|
|
61
63
|
|
|
62
64
|
```bash
|
|
63
65
|
npm install @react-native-async-storage/async-storage
|
|
64
66
|
```
|
|
65
67
|
|
|
68
|
+
**Option B: MMKV (recommended for performance)**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install react-native-mmkv
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
> MMKV is a high-performance synchronous storage library. If your project already uses MMKV, you can use it with the SDK — no need to install AsyncStorage. See [MMKV Storage](#6-mmkv-storage) for setup.
|
|
75
|
+
|
|
66
76
|
### 3. (Optional) Expo Modules
|
|
67
77
|
|
|
68
78
|
If you're using Expo, install these for device info and network monitoring:
|
|
@@ -263,7 +273,27 @@ const token = await Notifications.getExpoPushTokenAsync();
|
|
|
263
273
|
await Riuve.setFcmToken(token.data);
|
|
264
274
|
```
|
|
265
275
|
|
|
266
|
-
### 5.
|
|
276
|
+
### 5. MMKV Storage
|
|
277
|
+
|
|
278
|
+
By default the SDK uses AsyncStorage. If your project uses `react-native-mmkv`, you can pass it as a custom storage adapter for better performance:
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
import { MMKV } from 'react-native-mmkv';
|
|
282
|
+
import Riuve, { MMKVStorageAdapter } from 'riuve-rn';
|
|
283
|
+
|
|
284
|
+
const mmkv = new MMKV({ id: 'riuve-storage' });
|
|
285
|
+
|
|
286
|
+
await Riuve.initialize('api_key', {
|
|
287
|
+
storage: new MMKVStorageAdapter(mmkv),
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Why MMKV?**
|
|
292
|
+
- Synchronous reads/writes (no async overhead)
|
|
293
|
+
- ~30x faster than AsyncStorage
|
|
294
|
+
- No need to install AsyncStorage if you already use MMKV
|
|
295
|
+
|
|
296
|
+
### 6. Locale / Language Override
|
|
267
297
|
|
|
268
298
|
Override the device locale so the backend session uses your chosen language (e.g. for localized push notifications):
|
|
269
299
|
|
|
@@ -427,6 +457,10 @@ await Riuve.initialize('api_key', {
|
|
|
427
457
|
maxQueueSize: 1000, // Maximum queue size (default: 1000)
|
|
428
458
|
eventRetentionDays: 7, // Days to keep failed events (default: 7)
|
|
429
459
|
|
|
460
|
+
// Storage
|
|
461
|
+
storage: undefined, // Custom storage adapter (default: AsyncStorageAdapter)
|
|
462
|
+
// Use new MMKVStorageAdapter(mmkv) for MMKV
|
|
463
|
+
|
|
430
464
|
// Automatic Operations
|
|
431
465
|
autoFlushOnBackground: true, // Auto-flush on background (default: true)
|
|
432
466
|
});
|
|
@@ -883,5 +917,5 @@ MIT
|
|
|
883
917
|
|
|
884
918
|
---
|
|
885
919
|
|
|
886
|
-
**Last Updated:** 2026-02-
|
|
887
|
-
**SDK Version:** 1.0.
|
|
920
|
+
**Last Updated:** 2026-02-25
|
|
921
|
+
**SDK Version:** 1.0.5
|
package/dist/Riuve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Riuve.d.ts","sourceRoot":"","sources":["../src/Riuve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,SAAS,CAAC;AAWlD,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAChD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,aAAa,CAA4F;IAEjH;;OAEG;IACH,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,QAAQ;IAO9B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Riuve.d.ts","sourceRoot":"","sources":["../src/Riuve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,SAAS,CAAC;AAWlD,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAChD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,aAAa,CAA4F;IAEjH;;OAEG;IACH,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,QAAQ;IAO9B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4J9F;;OAEG;IACG,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAuChB;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDpF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAO/B;;OAEG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAOlC;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9C;;OAEG;IACH,SAAS,IAAI,WAAW,GAAG,IAAI;IAI/B;;OAEG;IACH,YAAY,IAAI,MAAM;IAOtB;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAO5C;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B/B;AAGD,QAAA,MAAM,KAAK,UAAyB,CAAC;AAErC,eAAe,KAAK,CAAC"}
|
package/dist/Riuve.js
CHANGED
|
@@ -103,6 +103,29 @@ class RiuveSDK {
|
|
|
103
103
|
if (this.config.autoFlushOnBackground) {
|
|
104
104
|
this.setupAppStateListener();
|
|
105
105
|
}
|
|
106
|
+
// Process immediate events FIRST (e.g. app_opened) — before any pending events
|
|
107
|
+
const immediateEvents = this.config.immediateEvents;
|
|
108
|
+
if (immediateEvents && immediateEvents.length > 0) {
|
|
109
|
+
const anonymousId = this.identityManager.getAnonymousId();
|
|
110
|
+
const externalUserId = this.identityManager.getExternalUserId();
|
|
111
|
+
for (const ie of immediateEvents) {
|
|
112
|
+
try {
|
|
113
|
+
const event = {
|
|
114
|
+
id: (0, uuid_1.generateUUID)(),
|
|
115
|
+
name: ie.name,
|
|
116
|
+
properties: ie.properties,
|
|
117
|
+
timestamp: Date.now(),
|
|
118
|
+
anonymousId,
|
|
119
|
+
externalUserId: externalUserId || undefined,
|
|
120
|
+
};
|
|
121
|
+
await this.eventQueue.enqueue(event);
|
|
122
|
+
logger_1.logger.info(`Immediate event enqueued: ${ie.name}`);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger_1.logger.error(`Failed to enqueue immediate event '${ie.name}':`, error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
106
129
|
// Process pending events (events that were tracked before initialization)
|
|
107
130
|
if (this.pendingEvents.length > 0) {
|
|
108
131
|
logger_1.logger.info(`Processing ${this.pendingEvents.length} pending events...`);
|
package/dist/types/config.d.ts
CHANGED
|
@@ -29,6 +29,15 @@ export interface RiuveConfig {
|
|
|
29
29
|
localeOverride?: string;
|
|
30
30
|
/** Custom storage adapter (default: AsyncStorageAdapter). Use MMKVStorageAdapter for MMKV. */
|
|
31
31
|
storage?: StorageAdapter;
|
|
32
|
+
/**
|
|
33
|
+
* Events to enqueue immediately during initialization, BEFORE any pending events.
|
|
34
|
+
* Use this for events like 'app_opened' that must appear first in the timeline,
|
|
35
|
+
* even when child components queue screen_viewed events before initialize() runs.
|
|
36
|
+
*/
|
|
37
|
+
immediateEvents?: Array<{
|
|
38
|
+
name: string;
|
|
39
|
+
properties?: Record<string, any>;
|
|
40
|
+
}>;
|
|
32
41
|
}
|
|
33
42
|
/** Partial configuration that can be passed during initialization */
|
|
34
43
|
export type RiuveConfigInput = Partial<Omit<RiuveConfig, 'apiKey'>> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IAEf,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAElB,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IAErB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,aAAa,EAAE,OAAO,CAAC;IAEvB,6EAA6E;IAC7E,qBAAqB,EAAE,OAAO,CAAC;IAE/B,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IAErB,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,CAAC;IAE3B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IAEvB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IAEnB,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IAEf,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAElB,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IAErB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,aAAa,EAAE,OAAO,CAAC;IAEvB,6EAA6E;IAC7E,qBAAqB,EAAE,OAAO,CAAC;IAE/B,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IAErB,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,CAAC;IAE3B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IAEvB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IAEnB,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG;IACpE,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
|