@getdevteam/analytics-react-native 0.1.0 → 0.2.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/README.md +31 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @getdevteam/analytics-react-native
|
|
2
|
+
|
|
3
|
+
React Native / Expo SDK for the [DevTeam Analytics & Logging Platform](https://github.com/getdevteam-ai/analytics).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @getdevteam/analytics-react-native @react-native-async-storage/async-storage
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Use
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createAnalytics } from "@getdevteam/analytics-react-native";
|
|
15
|
+
|
|
16
|
+
const analytics = createAnalytics({
|
|
17
|
+
key: "dtp_your_public_key",
|
|
18
|
+
host: "https://ingest.analytics.getdevteam.ai",
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
analytics.screen("Home", { tab: "featured" }); // screen view
|
|
22
|
+
analytics.track("add_to_cart", { sku: "A-1" });
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`@react-native-async-storage/async-storage` lets identity survive app restarts.
|
|
26
|
+
The SDK auto-flushes when the app goes to the background.
|
|
27
|
+
On a physical device use your machine's LAN IP instead of `localhost` when pointing at a local backend.
|
|
28
|
+
|
|
29
|
+
You need a public ingest key (`dtp_...`) and the ingest host URL for your environment - see [Getting a key](https://github.com/getdevteam-ai/analytics/tree/main/src/sdk#getting-a-key) in the full SDK docs.
|
|
30
|
+
|
|
31
|
+
Full client API, config options, and release process: [src/sdk README](https://github.com/getdevteam-ai/analytics/tree/main/src/sdk).
|
package/dist/index.cjs
CHANGED
|
@@ -108,7 +108,7 @@ function createAsyncStorageAdapter() {
|
|
|
108
108
|
|
|
109
109
|
// src/index.ts
|
|
110
110
|
var REACT_NATIVE_SDK_NAME = "@getdevteam/analytics-react-native";
|
|
111
|
-
var REACT_NATIVE_SDK_VERSION = "0.
|
|
111
|
+
var REACT_NATIVE_SDK_VERSION = "0.2.0";
|
|
112
112
|
function createAnalytics(config) {
|
|
113
113
|
const client = (0, import_analytics_core.createClient)({
|
|
114
114
|
...config,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/appState.ts","../src/context.ts","../src/storage.ts"],"sourcesContent":["import {\n createClient,\n type AnalyticsClient,\n type ClientConfig,\n type EventContext,\n} from \"@getdevteam/analytics-core\";\nimport { installAppStateFlush } from \"./appState\";\nimport { collectReactNativeContext } from \"./context\";\nimport { createAsyncStorageAdapter } from \"./storage\";\n\nexport const REACT_NATIVE_SDK_NAME = \"@getdevteam/analytics-react-native\";\nexport const REACT_NATIVE_SDK_VERSION = \"0.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/appState.ts","../src/context.ts","../src/storage.ts"],"sourcesContent":["import {\n createClient,\n type AnalyticsClient,\n type ClientConfig,\n type EventContext,\n} from \"@getdevteam/analytics-core\";\nimport { installAppStateFlush } from \"./appState\";\nimport { collectReactNativeContext } from \"./context\";\nimport { createAsyncStorageAdapter } from \"./storage\";\n\nexport const REACT_NATIVE_SDK_NAME = \"@getdevteam/analytics-react-native\";\nexport const REACT_NATIVE_SDK_VERSION = \"0.2.0\";\n\nexport interface ReactNativeAnalyticsConfig extends ClientConfig {\n context?: Partial<EventContext>;\n}\n\nexport function createAnalytics(config: ReactNativeAnalyticsConfig): AnalyticsClient {\n const client = createClient({\n ...config,\n storage: config.storage ?? createAsyncStorageAdapter(),\n });\n\n client.setContext({\n sdk_name: REACT_NATIVE_SDK_NAME,\n sdk_version: REACT_NATIVE_SDK_VERSION,\n ...collectReactNativeContext(),\n ...config.context,\n });\n\n const removeAppStateFlush = installAppStateFlush(client);\n\n return {\n ...client,\n shutdown: async () => {\n removeAppStateFlush();\n await client.shutdown();\n },\n };\n}\n\nexport { installAppStateFlush } from \"./appState\";\nexport { collectReactNativeContext, osNameFromPlatform } from \"./context\";\nexport { createAsyncStorageAdapter } from \"./storage\";\nexport type {\n AnalyticsClient,\n AnalyticsLogger,\n ClientConfig,\n EventContext,\n FetchLike,\n LogSeverity,\n Properties,\n StorageAdapter,\n} from \"@getdevteam/analytics-core\";\n","import { AppState, type AppStateStatus } from \"react-native\";\nimport type { AnalyticsClient } from \"@getdevteam/analytics-core\";\n\nexport function installAppStateFlush(client: AnalyticsClient): () => void {\n const onChange = (state: AppStateStatus): void => {\n if (state === \"background\" || state === \"inactive\") {\n void client.flush();\n }\n };\n const subscription = AppState.addEventListener(\"change\", onChange);\n return () => subscription.remove();\n}\n","import { Platform } from \"react-native\";\nimport type { EventContext } from \"@getdevteam/analytics-core\";\n\nexport function osNameFromPlatform(os: string): string {\n switch (os) {\n case \"ios\":\n return \"iOS\";\n case \"android\":\n return \"Android\";\n case \"macos\":\n return \"macOS\";\n case \"windows\":\n return \"Windows\";\n default:\n return os;\n }\n}\n\nexport function collectReactNativeContext(): EventContext {\n const context: EventContext = { platform: \"react-native\" };\n try {\n context.os_name = osNameFromPlatform(Platform.OS);\n context.os_version = String(Platform.Version);\n context.device_type = Platform.isTV ? \"tv\" : Platform.isPad ? \"tablet\" : \"mobile\";\n } catch {\n // Platform constants can be unavailable outside a real RN runtime; the platform tag alone still stands\n }\n return context;\n}\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport type { StorageAdapter } from \"@getdevteam/analytics-core\";\n\nexport function createAsyncStorageAdapter(): StorageAdapter {\n return {\n getItem: async (key) => {\n try {\n return await AsyncStorage.getItem(key);\n } catch {\n return null;\n }\n },\n setItem: async (key, value) => {\n try {\n await AsyncStorage.setItem(key, value);\n } catch {\n // storage unavailable; queue persistence degrades gracefully\n }\n },\n removeItem: async (key) => {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n // ignore\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKO;;;ACLP,0BAA8C;AAGvC,SAAS,qBAAqB,QAAqC;AACxE,QAAM,WAAW,CAAC,UAAgC;AAChD,QAAI,UAAU,gBAAgB,UAAU,YAAY;AAClD,WAAK,OAAO,MAAM;AAAA,IACpB;AAAA,EACF;AACA,QAAM,eAAe,6BAAS,iBAAiB,UAAU,QAAQ;AACjE,SAAO,MAAM,aAAa,OAAO;AACnC;;;ACXA,IAAAA,uBAAyB;AAGlB,SAAS,mBAAmB,IAAoB;AACrD,UAAQ,IAAI;AAAA,IACV,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,4BAA0C;AACxD,QAAM,UAAwB,EAAE,UAAU,eAAe;AACzD,MAAI;AACF,YAAQ,UAAU,mBAAmB,8BAAS,EAAE;AAChD,YAAQ,aAAa,OAAO,8BAAS,OAAO;AAC5C,YAAQ,cAAc,8BAAS,OAAO,OAAO,8BAAS,QAAQ,WAAW;AAAA,EAC3E,QAAQ;AAAA,EAER;AACA,SAAO;AACT;;;AC5BA,2BAAyB;AAGlB,SAAS,4BAA4C;AAC1D,SAAO;AAAA,IACL,SAAS,OAAO,QAAQ;AACtB,UAAI;AACF,eAAO,MAAM,qBAAAC,QAAa,QAAQ,GAAG;AAAA,MACvC,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAI;AACF,cAAM,qBAAAA,QAAa,QAAQ,KAAK,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,IACA,YAAY,OAAO,QAAQ;AACzB,UAAI;AACF,cAAM,qBAAAA,QAAa,WAAW,GAAG;AAAA,MACnC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AHjBO,IAAM,wBAAwB;AAC9B,IAAM,2BAA2B;AAMjC,SAAS,gBAAgB,QAAqD;AACnF,QAAM,aAAS,oCAAa;AAAA,IAC1B,GAAG;AAAA,IACH,SAAS,OAAO,WAAW,0BAA0B;AAAA,EACvD,CAAC;AAED,SAAO,WAAW;AAAA,IAChB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,GAAG,0BAA0B;AAAA,IAC7B,GAAG,OAAO;AAAA,EACZ,CAAC;AAED,QAAM,sBAAsB,qBAAqB,MAAM;AAEvD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,YAAY;AACpB,0BAAoB;AACpB,YAAM,OAAO,SAAS;AAAA,IACxB;AAAA,EACF;AACF;","names":["import_react_native","AsyncStorage"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -9,7 +9,7 @@ declare function collectReactNativeContext(): EventContext;
|
|
|
9
9
|
declare function createAsyncStorageAdapter(): StorageAdapter;
|
|
10
10
|
|
|
11
11
|
declare const REACT_NATIVE_SDK_NAME = "@getdevteam/analytics-react-native";
|
|
12
|
-
declare const REACT_NATIVE_SDK_VERSION = "0.
|
|
12
|
+
declare const REACT_NATIVE_SDK_VERSION = "0.2.0";
|
|
13
13
|
interface ReactNativeAnalyticsConfig extends ClientConfig {
|
|
14
14
|
context?: Partial<EventContext>;
|
|
15
15
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ declare function collectReactNativeContext(): EventContext;
|
|
|
9
9
|
declare function createAsyncStorageAdapter(): StorageAdapter;
|
|
10
10
|
|
|
11
11
|
declare const REACT_NATIVE_SDK_NAME = "@getdevteam/analytics-react-native";
|
|
12
|
-
declare const REACT_NATIVE_SDK_VERSION = "0.
|
|
12
|
+
declare const REACT_NATIVE_SDK_VERSION = "0.2.0";
|
|
13
13
|
interface ReactNativeAnalyticsConfig extends ClientConfig {
|
|
14
14
|
context?: Partial<EventContext>;
|
|
15
15
|
}
|
package/dist/index.js
CHANGED
|
@@ -70,7 +70,7 @@ function createAsyncStorageAdapter() {
|
|
|
70
70
|
|
|
71
71
|
// src/index.ts
|
|
72
72
|
var REACT_NATIVE_SDK_NAME = "@getdevteam/analytics-react-native";
|
|
73
|
-
var REACT_NATIVE_SDK_VERSION = "0.
|
|
73
|
+
var REACT_NATIVE_SDK_VERSION = "0.2.0";
|
|
74
74
|
function createAnalytics(config) {
|
|
75
75
|
const client = createClient({
|
|
76
76
|
...config,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/appState.ts","../src/context.ts","../src/storage.ts"],"sourcesContent":["import {\n createClient,\n type AnalyticsClient,\n type ClientConfig,\n type EventContext,\n} from \"@getdevteam/analytics-core\";\nimport { installAppStateFlush } from \"./appState\";\nimport { collectReactNativeContext } from \"./context\";\nimport { createAsyncStorageAdapter } from \"./storage\";\n\nexport const REACT_NATIVE_SDK_NAME = \"@getdevteam/analytics-react-native\";\nexport const REACT_NATIVE_SDK_VERSION = \"0.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/appState.ts","../src/context.ts","../src/storage.ts"],"sourcesContent":["import {\n createClient,\n type AnalyticsClient,\n type ClientConfig,\n type EventContext,\n} from \"@getdevteam/analytics-core\";\nimport { installAppStateFlush } from \"./appState\";\nimport { collectReactNativeContext } from \"./context\";\nimport { createAsyncStorageAdapter } from \"./storage\";\n\nexport const REACT_NATIVE_SDK_NAME = \"@getdevteam/analytics-react-native\";\nexport const REACT_NATIVE_SDK_VERSION = \"0.2.0\";\n\nexport interface ReactNativeAnalyticsConfig extends ClientConfig {\n context?: Partial<EventContext>;\n}\n\nexport function createAnalytics(config: ReactNativeAnalyticsConfig): AnalyticsClient {\n const client = createClient({\n ...config,\n storage: config.storage ?? createAsyncStorageAdapter(),\n });\n\n client.setContext({\n sdk_name: REACT_NATIVE_SDK_NAME,\n sdk_version: REACT_NATIVE_SDK_VERSION,\n ...collectReactNativeContext(),\n ...config.context,\n });\n\n const removeAppStateFlush = installAppStateFlush(client);\n\n return {\n ...client,\n shutdown: async () => {\n removeAppStateFlush();\n await client.shutdown();\n },\n };\n}\n\nexport { installAppStateFlush } from \"./appState\";\nexport { collectReactNativeContext, osNameFromPlatform } from \"./context\";\nexport { createAsyncStorageAdapter } from \"./storage\";\nexport type {\n AnalyticsClient,\n AnalyticsLogger,\n ClientConfig,\n EventContext,\n FetchLike,\n LogSeverity,\n Properties,\n StorageAdapter,\n} from \"@getdevteam/analytics-core\";\n","import { AppState, type AppStateStatus } from \"react-native\";\nimport type { AnalyticsClient } from \"@getdevteam/analytics-core\";\n\nexport function installAppStateFlush(client: AnalyticsClient): () => void {\n const onChange = (state: AppStateStatus): void => {\n if (state === \"background\" || state === \"inactive\") {\n void client.flush();\n }\n };\n const subscription = AppState.addEventListener(\"change\", onChange);\n return () => subscription.remove();\n}\n","import { Platform } from \"react-native\";\nimport type { EventContext } from \"@getdevteam/analytics-core\";\n\nexport function osNameFromPlatform(os: string): string {\n switch (os) {\n case \"ios\":\n return \"iOS\";\n case \"android\":\n return \"Android\";\n case \"macos\":\n return \"macOS\";\n case \"windows\":\n return \"Windows\";\n default:\n return os;\n }\n}\n\nexport function collectReactNativeContext(): EventContext {\n const context: EventContext = { platform: \"react-native\" };\n try {\n context.os_name = osNameFromPlatform(Platform.OS);\n context.os_version = String(Platform.Version);\n context.device_type = Platform.isTV ? \"tv\" : Platform.isPad ? \"tablet\" : \"mobile\";\n } catch {\n // Platform constants can be unavailable outside a real RN runtime; the platform tag alone still stands\n }\n return context;\n}\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport type { StorageAdapter } from \"@getdevteam/analytics-core\";\n\nexport function createAsyncStorageAdapter(): StorageAdapter {\n return {\n getItem: async (key) => {\n try {\n return await AsyncStorage.getItem(key);\n } catch {\n return null;\n }\n },\n setItem: async (key, value) => {\n try {\n await AsyncStorage.setItem(key, value);\n } catch {\n // storage unavailable; queue persistence degrades gracefully\n }\n },\n removeItem: async (key) => {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n // ignore\n }\n },\n };\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAIK;;;ACLP,SAAS,gBAAqC;AAGvC,SAAS,qBAAqB,QAAqC;AACxE,QAAM,WAAW,CAAC,UAAgC;AAChD,QAAI,UAAU,gBAAgB,UAAU,YAAY;AAClD,WAAK,OAAO,MAAM;AAAA,IACpB;AAAA,EACF;AACA,QAAM,eAAe,SAAS,iBAAiB,UAAU,QAAQ;AACjE,SAAO,MAAM,aAAa,OAAO;AACnC;;;ACXA,SAAS,gBAAgB;AAGlB,SAAS,mBAAmB,IAAoB;AACrD,UAAQ,IAAI;AAAA,IACV,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,4BAA0C;AACxD,QAAM,UAAwB,EAAE,UAAU,eAAe;AACzD,MAAI;AACF,YAAQ,UAAU,mBAAmB,SAAS,EAAE;AAChD,YAAQ,aAAa,OAAO,SAAS,OAAO;AAC5C,YAAQ,cAAc,SAAS,OAAO,OAAO,SAAS,QAAQ,WAAW;AAAA,EAC3E,QAAQ;AAAA,EAER;AACA,SAAO;AACT;;;AC5BA,OAAO,kBAAkB;AAGlB,SAAS,4BAA4C;AAC1D,SAAO;AAAA,IACL,SAAS,OAAO,QAAQ;AACtB,UAAI;AACF,eAAO,MAAM,aAAa,QAAQ,GAAG;AAAA,MACvC,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAI;AACF,cAAM,aAAa,QAAQ,KAAK,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,IACA,YAAY,OAAO,QAAQ;AACzB,UAAI;AACF,cAAM,aAAa,WAAW,GAAG;AAAA,MACnC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AHjBO,IAAM,wBAAwB;AAC9B,IAAM,2BAA2B;AAMjC,SAAS,gBAAgB,QAAqD;AACnF,QAAM,SAAS,aAAa;AAAA,IAC1B,GAAG;AAAA,IACH,SAAS,OAAO,WAAW,0BAA0B;AAAA,EACvD,CAAC;AAED,SAAO,WAAW;AAAA,IAChB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,GAAG,0BAA0B;AAAA,IAC7B,GAAG,OAAO;AAAA,EACZ,CAAC;AAED,QAAM,sBAAsB,qBAAqB,MAAM;AAEvD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,YAAY;AACpB,0BAAoB;AACpB,YAAM,OAAO,SAAS;AAAA,IACxB;AAAA,EACF;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getdevteam/analytics-react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "React Native SDK for the DevTeam analytics and logging platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"typecheck": "tsc --noEmit"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@getdevteam/analytics-core": "0.
|
|
38
|
+
"@getdevteam/analytics-core": "0.2.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@react-native-async-storage/async-storage": ">=1.19.0",
|