@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 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.1.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,
@@ -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.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"]}
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.1.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.1.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.1.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.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":[]}
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.1.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.1.0"
38
+ "@getdevteam/analytics-core": "0.2.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@react-native-async-storage/async-storage": ">=1.19.0",