@savers_app/react-native-sdk 1.2.2 → 1.2.3

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 CHANGED
@@ -6,7 +6,7 @@ React Native SDK that bridges host app features like maps, dialer, browser, devi
6
6
  - Open native maps by coordinates with graceful browser fallback
7
7
  - Dial pad invocation with optional number and direct call helper
8
8
  - External browser navigation from the host app or from web content
9
- - Close current screen via global navigationRef (React Navigation) using **END_SESSION**
9
+ - Close current screen via a binder component (React Navigation) using **END_SESSION** (no ref on NavigationContainer)
10
10
  - Device ID retrieval (via `react-native-device-info`)
11
11
  - Optional device location retrieval and URL payload enrichment
12
12
  - Session and keys management (API key, encryption key, program ref code, auth mode)
@@ -181,16 +181,36 @@ Notes:
181
181
 
182
182
  ## Navigation (End Session)
183
183
 
184
- The SDK can close the current screen without knowing the host app's navigation structure using a global `navigationRef`. This is useful for flows initiated from web content or deep links that need to programmatically exit back to the host app.
184
+ The SDK can close the current screen without knowing the host app's navigation structure. This is useful for flows initiated from web content or deep links that need to programmatically exit back to the host app.
185
185
 
186
- One-time host app setup:
186
+ One-time host app setup (binder component):
187
187
 
188
188
  ```tsx
189
- import { NavigationContainer } from '@react-navigation/native';
190
- import { navigationRef } from '@savers_app/react-native-sdk';
189
+ import { useEffect } from 'react';
190
+ import { NavigationContainer, useNavigation } from '@react-navigation/native';
191
+ import { setGoBackImpl } from '@savers_app/react-native-sdk';
192
+
193
+ function SaversNavBinder() {
194
+ const navigation = useNavigation();
195
+ useEffect(() => {
196
+ setGoBackImpl(() => {
197
+ if (navigation.canGoBack()) {
198
+ navigation.goBack();
199
+ return true;
200
+ }
201
+ return false;
202
+ });
203
+ }, [navigation]);
204
+ return null;
205
+ }
191
206
 
192
207
  export function App() {
193
- return <NavigationContainer ref={navigationRef}>{/* ... */}</NavigationContainer>;
208
+ return (
209
+ <NavigationContainer>
210
+ <SaversNavBinder />
211
+ {/* your navigators */}
212
+ </NavigationContainer>
213
+ );
194
214
  }
195
215
  ```
196
216
 
@@ -203,6 +223,10 @@ closeCurrentScreen(); // returns boolean
203
223
  closeCurrentScreenSafe(); // Android-only fallback to exitApp if it can't goBack()
204
224
  ```
205
225
 
226
+ Notes:
227
+ - No `ref` is required on your `NavigationContainer`.
228
+ - The binder component wires the SDK to React Navigation using context, enabling `closeCurrentScreen()` to work anywhere.
229
+
206
230
  ## WebView Integration
207
231
 
208
232
  Trigger native actions from web & bind `onMessage` to a `WebView`:
@@ -2,8 +2,8 @@
2
2
 
3
3
  export function onBoardingImageFromJson(json) {
4
4
  return {
5
- id: typeof json['id'] === 'number' ? json['id'] : null,
6
- url: typeof json['url'] === 'string' ? json['url'] : null
5
+ id: typeof json.id === 'number' ? json.id : null,
6
+ url: typeof json.url === 'string' ? json.url : null
7
7
  };
8
8
  }
9
9
  export function onBoardingImageListFromJson(list) {
@@ -21,9 +21,9 @@ export function onBoardingThemeFromJson(json) {
21
21
  const map = {
22
22
  ...json
23
23
  };
24
- const imagesRaw = Array.isArray(map['images']) ? map['images'] : [];
24
+ const imagesRaw = Array.isArray(map.images) ? map.images : [];
25
25
  const images = onBoardingImageListFromJson(imagesRaw);
26
- const total = typeof map['total'] === 'number' ? map['total'] : typeof map['total'] === 'string' ? Number(map['total']) : null;
26
+ const total = typeof map.total === 'number' ? map.total : typeof map.total === 'string' ? Number(map.total) : null;
27
27
  return {
28
28
  total: total ?? null,
29
29
  images: images.length > 0 ? images : null
@@ -35,15 +35,15 @@ export function onBoardingDataFromJson(json) {
35
35
  };
36
36
  const hasDayNight = 'day' in map || 'night' in map;
37
37
  if (hasDayNight) {
38
- const day = map['day'] ? onBoardingThemeFromJson(map['day']) : null;
39
- const night = map['night'] ? onBoardingThemeFromJson(map['night']) : null;
38
+ const day = map.day ? onBoardingThemeFromJson(map.day) : null;
39
+ const night = map.night ? onBoardingThemeFromJson(map.night) : null;
40
40
  return {
41
41
  day,
42
42
  night
43
43
  };
44
44
  }
45
- const legacyImages = Array.isArray(map['images']) ? onBoardingImageListFromJson(map['images']) : [];
46
- const legacyTotal = typeof map['total'] === 'number' ? map['total'] : typeof map['total'] === 'string' ? Number(map['total']) : null;
45
+ const legacyImages = Array.isArray(map.images) ? onBoardingImageListFromJson(map.images) : [];
46
+ const legacyTotal = typeof map.total === 'number' ? map.total : typeof map.total === 'string' ? Number(map.total) : null;
47
47
  const legacyTheme = {
48
48
  total: legacyTotal ?? null,
49
49
  images: legacyImages.length > 0 ? legacyImages : null
@@ -1 +1 @@
1
- {"version":3,"names":["onBoardingImageFromJson","json","id","url","onBoardingImageListFromJson","list","out","item","Array","isArray","push","onBoardingThemeFromJson","map","imagesRaw","images","total","Number","length","onBoardingDataFromJson","hasDayNight","day","night","legacyImages","legacyTotal","legacyTheme","d","hasTotal","hasImages","imageCount","isValid","getImage","index"],"sourceRoot":"../../../../src","sources":["data/models/onboardingModel.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["onBoardingImageFromJson","json","id","url","onBoardingImageListFromJson","list","out","item","Array","isArray","push","onBoardingThemeFromJson","map","imagesRaw","images","total","Number","length","onBoardingDataFromJson","hasDayNight","day","night","legacyImages","legacyTotal","legacyTheme","d","hasTotal","hasImages","imageCount","isValid","getImage","index"],"sourceRoot":"../../../../src","sources":["data/models/onboardingModel.ts"],"mappings":";;AAKA,OAAO,SAASA,uBAAuBA,CACrCC,IAAyB,EACR;EACjB,OAAO;IACLC,EAAE,EAAE,OAAOD,IAAI,CAACC,EAAE,KAAK,QAAQ,GAAGD,IAAI,CAACC,EAAE,GAAG,IAAI;IAChDC,GAAG,EAAE,OAAOF,IAAI,CAACE,GAAG,KAAK,QAAQ,GAAGF,IAAI,CAACE,GAAG,GAAG;EACjD,CAAC;AACH;AAEA,OAAO,SAASC,2BAA2BA,CAACC,IAAW,EAAqB;EAC1E,MAAMC,GAAsB,GAAG,EAAE;EACjC,KAAK,MAAMC,IAAI,IAAIF,IAAI,EAAE;IACvB,IAAIE,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,EAAE;MAC5D,IAAI;QACFD,GAAG,CAACI,IAAI,CAACV,uBAAuB,CAACO,IAA2B,CAAC,CAAC;MAChE,CAAC,CAAC,MAAM,CAAC;IACX;EACF;EACA,OAAOD,GAAG;AACZ;AAOA,OAAO,SAASK,uBAAuBA,CAACV,IAAS,EAAuB;EACtE,MAAMW,GAAG,GAAG;IAAE,GAAIX;EAA6B,CAAC;EAChD,MAAMY,SAAS,GAAGL,KAAK,CAACC,OAAO,CAACG,GAAG,CAACE,MAAM,CAAC,GAAIF,GAAG,CAACE,MAAM,GAAa,EAAE;EACxE,MAAMA,MAAM,GAAGV,2BAA2B,CAACS,SAAS,CAAC;EACrD,MAAME,KAAK,GACT,OAAOH,GAAG,CAACG,KAAK,KAAK,QAAQ,GACzBH,GAAG,CAACG,KAAK,GACT,OAAOH,GAAG,CAACG,KAAK,KAAK,QAAQ,GAC3BC,MAAM,CAACJ,GAAG,CAACG,KAAK,CAAC,GACjB,IAAI;EACZ,OAAO;IACLA,KAAK,EAAEA,KAAK,IAAI,IAAI;IACpBD,MAAM,EAAEA,MAAM,CAACG,MAAM,GAAG,CAAC,GAAGH,MAAM,GAAG;EACvC,CAAC;AACH;AAOA,OAAO,SAASI,sBAAsBA,CAACjB,IAAS,EAAkB;EAChE,MAAMW,GAAG,GAAG;IAAE,GAAIX;EAA6B,CAAC;EAChD,MAAMkB,WAAW,GAAG,KAAK,IAAIP,GAAG,IAAI,OAAO,IAAIA,GAAG;EAClD,IAAIO,WAAW,EAAE;IACf,MAAMC,GAAG,GAAGR,GAAG,CAACQ,GAAG,GAAGT,uBAAuB,CAACC,GAAG,CAACQ,GAAG,CAAC,GAAG,IAAI;IAC7D,MAAMC,KAAK,GAAGT,GAAG,CAACS,KAAK,GAAGV,uBAAuB,CAACC,GAAG,CAACS,KAAK,CAAC,GAAG,IAAI;IACnE,OAAO;MAAED,GAAG;MAAEC;IAAM,CAAC;EACvB;EACA,MAAMC,YAAY,GAAGd,KAAK,CAACC,OAAO,CAACG,GAAG,CAACE,MAAM,CAAC,GAC1CV,2BAA2B,CAACQ,GAAG,CAACE,MAAe,CAAC,GAChD,EAAE;EACN,MAAMS,WAAW,GACf,OAAOX,GAAG,CAACG,KAAK,KAAK,QAAQ,GACzBH,GAAG,CAACG,KAAK,GACT,OAAOH,GAAG,CAACG,KAAK,KAAK,QAAQ,GAC3BC,MAAM,CAACJ,GAAG,CAACG,KAAK,CAAC,GACjB,IAAI;EACZ,MAAMS,WAAgC,GAAG;IACvCT,KAAK,EAAEQ,WAAW,IAAI,IAAI;IAC1BT,MAAM,EAAEQ,YAAY,CAACL,MAAM,GAAG,CAAC,GAAGK,YAAY,GAAG;EACnD,CAAC;EACD,OAAO;IAAEF,GAAG,EAAEI,WAAW;IAAEH,KAAK,EAAE;EAAK,CAAC;AAC1C;AAEA,OAAO,MAAMP,MAAM,GAAIW,CAAyB,IAC9CA,CAAC,EAAEL,GAAG,EAAEN,MAAM,IAAIW,CAAC,EAAEJ,KAAK,EAAEP,MAAM,IAAI,IAAI;AAC5C,OAAO,MAAMC,KAAK,GAAIU,CAAyB,IAC7CA,CAAC,EAAEL,GAAG,EAAEL,KAAK,IAAIU,CAAC,EAAEJ,KAAK,EAAEN,KAAK,IAAI,IAAI;AAC1C,OAAO,MAAMW,QAAQ,GAAID,CAAyB,IAChDV,KAAK,CAACU,CAAC,CAAC,KAAK,IAAI;AACnB,OAAO,MAAME,SAAS,GAAIF,CAAyB,IACjD,CAAC,CAACX,MAAM,CAACW,CAAC,CAAC,IAAI,CAACX,MAAM,CAACW,CAAC,CAAC,EAAER,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7C,OAAO,MAAMW,UAAU,GAAIH,CAAyB,IAClDX,MAAM,CAACW,CAAC,CAAC,EAAER,MAAM,IAAI,CAAC;AACxB,OAAO,MAAMY,OAAO,GAAIJ,CAAyB,IAC/C,CAAC,EAAEA,CAAC,EAAEL,GAAG,EAAEL,KAAK,IAAIU,CAAC,EAAEL,GAAG,EAAEN,MAAM,CAAC,IACnC,CAAC,EAAEW,CAAC,EAAEJ,KAAK,EAAEN,KAAK,IAAIU,CAAC,EAAEJ,KAAK,EAAEP,MAAM,CAAC;AACzC,OAAO,MAAMgB,QAAQ,GAAGA,CACtBL,CAAoC,EACpCM,KAAa,KACc;EAC3B,MAAM1B,IAAI,GAAGS,MAAM,CAACW,CAAC,CAAC;EACtB,IAAIpB,IAAI,IAAI0B,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAG1B,IAAI,CAACY,MAAM,EAAE,OAAOZ,IAAI,CAAC0B,KAAK,CAAC,IAAI,IAAI;EACzE,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Linking","Platform","isValidPhoneNumber","callPhone","phone","Error","url","OS","openURL","openDialPad"],"sourceRoot":"../../../../src","sources":["services/navigation/dialPad.ts"],"mappings":";;AAAA;AACA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,cAAc;;AAEhD;AACA,SAASC,kBAAkB,QAAQ,0BAAuB;AAE1D,OAAO,MAAMC,SAAS,GAAG,MAAOC,KAAa,IAAoB;EAC/D,IAAI,CAACF,kBAAkB,CAACE,KAAK,CAAC,EAAE;IAC9B,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;EACzC;EAEA,MAAMC,GAAG,GACPL,QAAQ,CAACM,EAAE,KAAK,KAAK,GACjB,aAAaH,KAAK,EAAE,CAAC;EAAA,EACrB,OAAOA,KAAK,EAAE;EAEpB,IAAI;IACF,MAAMJ,OAAO,CAACQ,OAAO,CAACF,GAAG,CAAC;EAC5B,CAAC,CAAC,MAAM;IACN,MAAM,IAAID,KAAK,CAAC,oBAAoB,CAAC;EACvC;AACF,CAAC;AAED,OAAO,eAAeI,WAAWA,CAACL,KAAc,EAAiB;EAC/D,MAAME,GAAG,GACPL,QAAQ,CAACM,EAAE,KAAK,KAAK,GACjBH,KAAK,GACH,aAAaA,KAAK,EAAE,GACpB,MAAM,CAAC;EAAA,EACTA,KAAK,GACL,OAAOA,KAAK,EAAE,GACd,MAAM;EAEZ,IAAI;IACF,MAAMJ,OAAO,CAACQ,OAAO,CAACF,GAAG,CAAC;EAC5B,CAAC,CAAC,MAAM;IACN,MAAM,IAAID,KAAK,CAAC,wBAAwB,CAAC;EAC3C;AACF","ignoreList":[]}
1
+ {"version":3,"names":["Linking","Platform","isValidPhoneNumber","callPhone","phone","Error","url","OS","openURL","openDialPad"],"sourceRoot":"../../../../src","sources":["services/navigation/dialPad.ts"],"mappings":";;AAAA;AACA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,cAAc;;AAEhD;AACA,SAASC,kBAAkB,QAAQ,0BAAuB;AAE1D,OAAO,MAAMC,SAAS,GAAG,MAAOC,KAAa,IAAoB;EAC/D,IAAI,CAACF,kBAAkB,CAACE,KAAK,CAAC,EAAE;IAC9B,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;EACzC;EAEA,MAAMC,GAAG,GACPL,QAAQ,CAACM,EAAE,KAAK,KAAK,GACjB,aAAaH,KAAK,EAAE,CAAC;EAAA,EACrB,OAAOA,KAAK,EAAE;EAEpB,IAAI;IACF,MAAMJ,OAAO,CAACQ,OAAO,CAACF,GAAG,CAAC;EAC5B,CAAC,CAAC,MAAM;IACN,MAAM,IAAID,KAAK,CAAC,oBAAoB,CAAC;EACvC;AACF,CAAC;AAED,OAAO,eAAeI,WAAWA,CAACL,KAAc,EAAiB;EAC/D,MAAME,GAAG,GACPL,QAAQ,CAACM,EAAE,KAAK,KAAK,GACjBH,KAAK,GACH,aAAaA,KAAK,EAAE,GACpB,MAAM,CAAC;EAAA,EACTA,KAAK,GACH,OAAOA,KAAK,EAAE,GACd,MAAM;EAEd,IAAI;IACF,MAAMJ,OAAO,CAACQ,OAAO,CAACF,GAAG,CAAC;EAC5B,CAAC,CAAC,MAAM;IACN,MAAM,IAAID,KAAK,CAAC,wBAAwB,CAAC;EAC3C;AACF","ignoreList":[]}
@@ -2,15 +2,14 @@
2
2
 
3
3
  // React Native Core
4
4
  import { BackHandler, Platform } from 'react-native';
5
-
6
- // Navigation / Routing
7
- import { createNavigationContainerRef } from '@react-navigation/native';
8
- export const navigationRef = createNavigationContainerRef();
5
+ let goBackFn = null;
6
+ export function setGoBackImpl(fn) {
7
+ goBackFn = fn;
8
+ }
9
9
  export function closeCurrentScreen() {
10
- if (navigationRef.isReady() && navigationRef.canGoBack()) {
11
- navigationRef.goBack();
12
- return true;
13
- }
10
+ try {
11
+ if (goBackFn) return !!goBackFn();
12
+ } catch {}
14
13
  return false;
15
14
  }
16
15
  export function closeCurrentScreenSafe() {
@@ -1 +1 @@
1
- {"version":3,"names":["BackHandler","Platform","createNavigationContainerRef","navigationRef","closeCurrentScreen","isReady","canGoBack","goBack","closeCurrentScreenSafe","closed","OS","exitApp"],"sourceRoot":"../../../../src","sources":["services/navigation/goBackNavigation.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,cAAc;;AAEpD;AACA,SAASC,4BAA4B,QAAQ,0BAA0B;AAEvE,OAAO,MAAMC,aAAa,GAAGD,4BAA4B,CAAC,CAAC;AAE3D,OAAO,SAASE,kBAAkBA,CAAA,EAAY;EAC5C,IAAID,aAAa,CAACE,OAAO,CAAC,CAAC,IAAIF,aAAa,CAACG,SAAS,CAAC,CAAC,EAAE;IACxDH,aAAa,CAACI,MAAM,CAAC,CAAC;IACtB,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,OAAO,SAASC,sBAAsBA,CAAA,EAAS;EAC7C,MAAMC,MAAM,GAAGL,kBAAkB,CAAC,CAAC;EACnC,IAAI,CAACK,MAAM,IAAIR,QAAQ,CAACS,EAAE,KAAK,SAAS,EAAE;IACxCV,WAAW,CAACW,OAAO,CAAC,CAAC;EACvB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["BackHandler","Platform","goBackFn","setGoBackImpl","fn","closeCurrentScreen","closeCurrentScreenSafe","closed","OS","exitApp"],"sourceRoot":"../../../../src","sources":["services/navigation/goBackNavigation.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,cAAc;AAEpD,IAAIC,QAAgC,GAAG,IAAI;AAC3C,OAAO,SAASC,aAAaA,CAACC,EAAiB,EAAE;EAC/CF,QAAQ,GAAGE,EAAE;AACf;AAEA,OAAO,SAASC,kBAAkBA,CAAA,EAAY;EAC5C,IAAI;IACF,IAAIH,QAAQ,EAAE,OAAO,CAAC,CAACA,QAAQ,CAAC,CAAC;EACnC,CAAC,CAAC,MAAM,CAAC;EACT,OAAO,KAAK;AACd;AAEA,OAAO,SAASI,sBAAsBA,CAAA,EAAS;EAC7C,MAAMC,MAAM,GAAGF,kBAAkB,CAAC,CAAC;EACnC,IAAI,CAACE,MAAM,IAAIN,QAAQ,CAACO,EAAE,KAAK,SAAS,EAAE;IACxCR,WAAW,CAACS,OAAO,CAAC,CAAC;EACvB;AACF","ignoreList":[]}
@@ -19,7 +19,7 @@ function isBase64(input) {
19
19
  return /^[A-Za-z0-9+/]+={0,2}$/.test(input);
20
20
  }
21
21
  function base64ByteLength(b64) {
22
- const cleaned = b64.replace(/=+$/, '');
22
+ const cleaned = b64.replace(/[=]+$/, '');
23
23
  return Math.floor(cleaned.length * 3 / 4);
24
24
  }
25
25
  export async function aesEncrypt(text, key) {
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","AesGcmCrypto","ensureAesAvailable","nativeModule","RNAesGcmCrypto","Error","encrypt","isBase64","input","test","base64ByteLength","b64","cleaned","replace","Math","floor","length","aesEncrypt","text","key","iv","tag","content","base64Encrypt","err","message","aesDecrypt","ciphertext","split","decrypted","decrypt","plain","utf8","encodeURIComponent","_","p1","String","fromCharCode","parseInt","btoa","base64Decrypt","encoded","binary","atob","map","c","charCodeAt","toString","slice","join","decodeURIComponent"],"sourceRoot":"../../../src","sources":["utils/encryption.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,OAAOC,YAAY,MAAM,6BAA6B;;AAEtD;AACA;AACA;AACA,SAASC,kBAAkBA,CAAA,EAAG;EAC5B,MAAMC,YAAY,GAChBH,aAAa,CAACC,YAAY,IAAID,aAAa,CAACI,cAAc;EAE5D,IAAI,CAACH,YAAY,IAAI,CAACE,YAAY,EAAE;IAClC,MAAM,IAAIE,KAAK,CACb,uEAAuE,GACrE,QAAQ,GACR,2CAA2C,GAC3C,4BAA4B,GAC5B,sBACJ,CAAC;EACH;EAEA,IAAI,OAAOJ,YAAY,CAACK,OAAO,KAAK,UAAU,EAAE;IAC9C,MAAM,IAAID,KAAK,CACb,+DACF,CAAC;EACH;AACF;AAEA,SAASE,QAAQA,CAACC,KAAa,EAAW;EACxC,OAAO,wBAAwB,CAACC,IAAI,CAACD,KAAK,CAAC;AAC7C;AAEA,SAASE,gBAAgBA,CAACC,GAAW,EAAU;EAC7C,MAAMC,OAAO,GAAGD,GAAG,CAACE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACtC,OAAOC,IAAI,CAACC,KAAK,CAAEH,OAAO,CAACI,MAAM,GAAG,CAAC,GAAI,CAAC,CAAC;AAC7C;AAEA,OAAO,eAAeC,UAAUA,CAACC,IAAY,EAAEC,GAAW,EAAmB;EAC3EjB,kBAAkB,CAAC,CAAC;EAEpB,IAAI,CAACK,QAAQ,CAACY,GAAG,CAAC,IAAIT,gBAAgB,CAACS,GAAG,CAAC,KAAK,EAAE,EAAE;IAClD,MAAM,IAAId,KAAK,CACb,+DACF,CAAC;EACH;EAEA,IAAI;IACF,MAAM;MAAEe,EAAE;MAAEC,GAAG;MAAEC;IAAQ,CAAC,GAAG,MAAMrB,YAAY,CAACK,OAAO,CAACY,IAAI,EAAE,KAAK,EAAEC,GAAG,CAAC;IAEzE,OAAOI,aAAa,CAAC,GAAGH,EAAE,IAAIE,OAAO,IAAID,GAAG,EAAE,CAAC;EACjD,CAAC,CAAC,OAAOG,GAAQ,EAAE;IACjB,MAAM,IAAInB,KAAK,CAAC,0BAA0BmB,GAAG,EAAEC,OAAO,IAAID,GAAG,EAAE,CAAC;EAClE;AACF;AAEA,OAAO,eAAeE,UAAUA,CAC9BC,UAAkB,EAClBR,GAAW,EACM;EACjBjB,kBAAkB,CAAC,CAAC;EAEpB,IAAI,CAACK,QAAQ,CAACY,GAAG,CAAC,IAAIT,gBAAgB,CAACS,GAAG,CAAC,KAAK,EAAE,EAAE;IAClD,MAAM,IAAId,KAAK,CACb,+DACF,CAAC;EACH;EAEA,IAAI;IACF,MAAM,CAACe,EAAE,GAAG,EAAE,EAAEE,OAAO,GAAG,EAAE,EAAED,GAAG,GAAG,EAAE,CAAC,GAAGM,UAAU,CAACC,KAAK,CAAC,GAAG,CAAC;IAE/D,MAAMC,SAAS,GAAG,MAAM5B,YAAY,CAAC6B,OAAO,CAACR,OAAO,EAAEH,GAAG,EAAEC,EAAE,EAAEC,GAAG,EAAE,KAAK,CAAC;IAE1E,OAAOQ,SAAS;EAClB,CAAC,CAAC,OAAOL,GAAQ,EAAE;IACjB,MAAM,IAAInB,KAAK,CAAC,0BAA0BmB,GAAG,EAAEC,OAAO,IAAID,GAAG,EAAE,CAAC;EAClE;AACF;AAKA,OAAO,SAASD,aAAaA,CAACQ,KAAa,EAAU;EACnD,MAAMC,IAAI,GAAGC,kBAAkB,CAACF,KAAK,CAAC,CAAClB,OAAO,CAC5C,iBAAiB,EACjB,CAACqB,CAAC,EAAEC,EAAU,KAAKC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACH,EAAE,EAAE,EAAE,CAAC,CACzD,CAAC;EACD,OAAOI,IAAI,CAACP,IAAI,CAAC;AACnB;AAEA,OAAO,SAASQ,aAAaA,CAACC,OAAe,EAAU;EACrD,MAAMC,MAAM,GAAGC,IAAI,CAACF,OAAO,CAAC;EAC5B,MAAMT,IAAI,GAAGU,MAAM,CAChBd,KAAK,CAAC,EAAE,CAAC,CACTgB,GAAG,CAAEC,CAAC,IAAK,GAAG,GAAG,CAAC,IAAI,GAAGA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,EAAEC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CACjEC,IAAI,CAAC,EAAE,CAAC;EACX,OAAOC,kBAAkB,CAAClB,IAAI,CAAC;AACjC","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","AesGcmCrypto","ensureAesAvailable","nativeModule","RNAesGcmCrypto","Error","encrypt","isBase64","input","test","base64ByteLength","b64","cleaned","replace","Math","floor","length","aesEncrypt","text","key","iv","tag","content","base64Encrypt","err","message","aesDecrypt","ciphertext","split","decrypted","decrypt","plain","utf8","encodeURIComponent","_","p1","String","fromCharCode","parseInt","btoa","base64Decrypt","encoded","binary","atob","map","c","charCodeAt","toString","slice","join","decodeURIComponent"],"sourceRoot":"../../../src","sources":["utils/encryption.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,OAAOC,YAAY,MAAM,6BAA6B;;AAEtD;AACA;AACA;AACA,SAASC,kBAAkBA,CAAA,EAAG;EAC5B,MAAMC,YAAY,GAChBH,aAAa,CAACC,YAAY,IAAID,aAAa,CAACI,cAAc;EAE5D,IAAI,CAACH,YAAY,IAAI,CAACE,YAAY,EAAE;IAClC,MAAM,IAAIE,KAAK,CACb,uEAAuE,GACrE,QAAQ,GACR,2CAA2C,GAC3C,4BAA4B,GAC5B,sBACJ,CAAC;EACH;EAEA,IAAI,OAAOJ,YAAY,CAACK,OAAO,KAAK,UAAU,EAAE;IAC9C,MAAM,IAAID,KAAK,CACb,+DACF,CAAC;EACH;AACF;AAEA,SAASE,QAAQA,CAACC,KAAa,EAAW;EACxC,OAAO,wBAAwB,CAACC,IAAI,CAACD,KAAK,CAAC;AAC7C;AAEA,SAASE,gBAAgBA,CAACC,GAAW,EAAU;EAC7C,MAAMC,OAAO,GAAGD,GAAG,CAACE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EACxC,OAAOC,IAAI,CAACC,KAAK,CAAEH,OAAO,CAACI,MAAM,GAAG,CAAC,GAAI,CAAC,CAAC;AAC7C;AAEA,OAAO,eAAeC,UAAUA,CAACC,IAAY,EAAEC,GAAW,EAAmB;EAC3EjB,kBAAkB,CAAC,CAAC;EAEpB,IAAI,CAACK,QAAQ,CAACY,GAAG,CAAC,IAAIT,gBAAgB,CAACS,GAAG,CAAC,KAAK,EAAE,EAAE;IAClD,MAAM,IAAId,KAAK,CACb,+DACF,CAAC;EACH;EAEA,IAAI;IACF,MAAM;MAAEe,EAAE;MAAEC,GAAG;MAAEC;IAAQ,CAAC,GAAG,MAAMrB,YAAY,CAACK,OAAO,CAACY,IAAI,EAAE,KAAK,EAAEC,GAAG,CAAC;IAEzE,OAAOI,aAAa,CAAC,GAAGH,EAAE,IAAIE,OAAO,IAAID,GAAG,EAAE,CAAC;EACjD,CAAC,CAAC,OAAOG,GAAQ,EAAE;IACjB,MAAM,IAAInB,KAAK,CAAC,0BAA0BmB,GAAG,EAAEC,OAAO,IAAID,GAAG,EAAE,CAAC;EAClE;AACF;AAEA,OAAO,eAAeE,UAAUA,CAC9BC,UAAkB,EAClBR,GAAW,EACM;EACjBjB,kBAAkB,CAAC,CAAC;EAEpB,IAAI,CAACK,QAAQ,CAACY,GAAG,CAAC,IAAIT,gBAAgB,CAACS,GAAG,CAAC,KAAK,EAAE,EAAE;IAClD,MAAM,IAAId,KAAK,CACb,+DACF,CAAC;EACH;EAEA,IAAI;IACF,MAAM,CAACe,EAAE,GAAG,EAAE,EAAEE,OAAO,GAAG,EAAE,EAAED,GAAG,GAAG,EAAE,CAAC,GAAGM,UAAU,CAACC,KAAK,CAAC,GAAG,CAAC;IAE/D,MAAMC,SAAS,GAAG,MAAM5B,YAAY,CAAC6B,OAAO,CAACR,OAAO,EAAEH,GAAG,EAAEC,EAAE,EAAEC,GAAG,EAAE,KAAK,CAAC;IAE1E,OAAOQ,SAAS;EAClB,CAAC,CAAC,OAAOL,GAAQ,EAAE;IACjB,MAAM,IAAInB,KAAK,CAAC,0BAA0BmB,GAAG,EAAEC,OAAO,IAAID,GAAG,EAAE,CAAC;EAClE;AACF;AAKA,OAAO,SAASD,aAAaA,CAACQ,KAAa,EAAU;EACnD,MAAMC,IAAI,GAAGC,kBAAkB,CAACF,KAAK,CAAC,CAAClB,OAAO,CAC5C,iBAAiB,EACjB,CAACqB,CAAC,EAAEC,EAAU,KAAKC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACH,EAAE,EAAE,EAAE,CAAC,CACzD,CAAC;EACD,OAAOI,IAAI,CAACP,IAAI,CAAC;AACnB;AAEA,OAAO,SAASQ,aAAaA,CAACC,OAAe,EAAU;EACrD,MAAMC,MAAM,GAAGC,IAAI,CAACF,OAAO,CAAC;EAC5B,MAAMT,IAAI,GAAGU,MAAM,CAChBd,KAAK,CAAC,EAAE,CAAC,CACTgB,GAAG,CAAEC,CAAC,IAAK,GAAG,GAAG,CAAC,IAAI,GAAGA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,EAAEC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CACjEC,IAAI,CAAC,EAAE,CAAC;EACX,OAAOC,kBAAkB,CAAClB,IAAI,CAAC;AACjC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"onboardingModel.d.ts","sourceRoot":"","sources":["../../../../../src/data/models/onboardingModel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,eAAe,CAKjB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,CAU1E;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB,CAgBtE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CAsBhE;AAED,eAAO,MAAM,MAAM,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,eAAe,EAAE,GAAG,IAC3B,CAAC;AAC7C,eAAO,MAAM,KAAK,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,MAAM,GAAG,IACjB,CAAC;AAC3C,eAAO,MAAM,QAAQ,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OAClC,CAAC;AACpB,eAAO,MAAM,SAAS,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OACT,CAAC;AAC9C,eAAO,MAAM,UAAU,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,MAC/B,CAAC;AACzB,eAAO,MAAM,OAAO,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OAEX,CAAC;AAC1C,eAAO,MAAM,QAAQ,GACnB,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,MAAM,KACZ,eAAe,GAAG,IAIpB,CAAC"}
1
+ {"version":3,"file":"onboardingModel.d.ts","sourceRoot":"","sources":["../../../../../src/data/models/onboardingModel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,eAAe,CAKjB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,CAU1E;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB,CActE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CAsBhE;AAED,eAAO,MAAM,MAAM,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,eAAe,EAAE,GAAG,IAC3B,CAAC;AAC7C,eAAO,MAAM,KAAK,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,MAAM,GAAG,IACjB,CAAC;AAC3C,eAAO,MAAM,QAAQ,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OAClC,CAAC;AACpB,eAAO,MAAM,SAAS,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OACT,CAAC;AAC9C,eAAO,MAAM,UAAU,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,MAC/B,CAAC;AACzB,eAAO,MAAM,OAAO,GAAI,IAAI,cAAc,GAAG,IAAI,KAAG,OAEX,CAAC;AAC1C,eAAO,MAAM,QAAQ,GACnB,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,MAAM,KACZ,eAAe,GAAG,IAIpB,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare const navigationRef: import("@react-navigation/core").NavigationContainerRefWithCurrent<ReactNavigation.RootParamList>;
1
+ export declare function setGoBackImpl(fn: () => boolean): void;
2
2
  export declare function closeCurrentScreen(): boolean;
3
3
  export declare function closeCurrentScreenSafe(): void;
4
4
  //# sourceMappingURL=goBackNavigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"goBackNavigation.d.ts","sourceRoot":"","sources":["../../../../../src/services/navigation/goBackNavigation.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,mGAAiC,CAAC;AAE5D,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}
1
+ {"version":3,"file":"goBackNavigation.d.ts","sourceRoot":"","sources":["../../../../../src/services/navigation/goBackNavigation.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,OAAO,QAE9C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savers_app/react-native-sdk",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Cross-platform React Native SDK exposing native features (maps, dial pad, browser), device ID/location and session utilities, a URL generator, and a WebView message bridge to trigger actions from web content.",
5
5
  "main": "./lib/module/index.js",
6
6
  "react-native": "./src/index.tsx",
@@ -78,7 +78,7 @@
78
78
  "eslint-config-prettier": "^10.1.8",
79
79
  "eslint-plugin-prettier": "^5.5.4",
80
80
  "jest": "^29.7.0",
81
- "lefthook": "^2.0.3",
81
+ "lefthook": "2.1.1",
82
82
  "prettier": "^3.8.1",
83
83
  "react": "19.1.0",
84
84
  "react-native": "0.81.5",
@@ -7,8 +7,8 @@ export function onBoardingImageFromJson(
7
7
  json: Record<string, any>
8
8
  ): OnBoardingImage {
9
9
  return {
10
- id: typeof json['id'] === 'number' ? json['id'] : null,
11
- url: typeof json['url'] === 'string' ? json['url'] : null,
10
+ id: typeof json.id === 'number' ? json.id : null,
11
+ url: typeof json.url === 'string' ? json.url : null,
12
12
  };
13
13
  }
14
14
 
@@ -31,16 +31,14 @@ export type OnBoardingThemeData = {
31
31
 
32
32
  export function onBoardingThemeFromJson(json: any): OnBoardingThemeData {
33
33
  const map = { ...(json as Record<string, any>) };
34
- const imagesRaw = Array.isArray(map['images'])
35
- ? (map['images'] as any[])
36
- : [];
34
+ const imagesRaw = Array.isArray(map.images) ? (map.images as any[]) : [];
37
35
  const images = onBoardingImageListFromJson(imagesRaw);
38
36
  const total =
39
- typeof map['total'] === 'number'
40
- ? map['total']
41
- : typeof map['total'] === 'string'
42
- ? Number(map['total'])
43
- : null;
37
+ typeof map.total === 'number'
38
+ ? map.total
39
+ : typeof map.total === 'string'
40
+ ? Number(map.total)
41
+ : null;
44
42
  return {
45
43
  total: total ?? null,
46
44
  images: images.length > 0 ? images : null,
@@ -56,19 +54,19 @@ export function onBoardingDataFromJson(json: any): OnBoardingData {
56
54
  const map = { ...(json as Record<string, any>) };
57
55
  const hasDayNight = 'day' in map || 'night' in map;
58
56
  if (hasDayNight) {
59
- const day = map['day'] ? onBoardingThemeFromJson(map['day']) : null;
60
- const night = map['night'] ? onBoardingThemeFromJson(map['night']) : null;
57
+ const day = map.day ? onBoardingThemeFromJson(map.day) : null;
58
+ const night = map.night ? onBoardingThemeFromJson(map.night) : null;
61
59
  return { day, night };
62
60
  }
63
- const legacyImages = Array.isArray(map['images'])
64
- ? onBoardingImageListFromJson(map['images'] as any[])
61
+ const legacyImages = Array.isArray(map.images)
62
+ ? onBoardingImageListFromJson(map.images as any[])
65
63
  : [];
66
64
  const legacyTotal =
67
- typeof map['total'] === 'number'
68
- ? map['total']
69
- : typeof map['total'] === 'string'
70
- ? Number(map['total'])
71
- : null;
65
+ typeof map.total === 'number'
66
+ ? map.total
67
+ : typeof map.total === 'string'
68
+ ? Number(map.total)
69
+ : null;
72
70
  const legacyTheme: OnBoardingThemeData = {
73
71
  total: legacyTotal ?? null,
74
72
  images: legacyImages.length > 0 ? legacyImages : null,
@@ -28,8 +28,8 @@ export async function openDialPad(phone?: string): Promise<void> {
28
28
  ? `telprompt:${phone}`
29
29
  : 'tel:' // open empty dial pad
30
30
  : phone
31
- ? `tel:${phone}`
32
- : 'tel:';
31
+ ? `tel:${phone}`
32
+ : 'tel:';
33
33
 
34
34
  try {
35
35
  await Linking.openURL(url);
@@ -1,16 +1,15 @@
1
1
  // React Native Core
2
2
  import { BackHandler, Platform } from 'react-native';
3
3
 
4
- // Navigation / Routing
5
- import { createNavigationContainerRef } from '@react-navigation/native';
6
-
7
- export const navigationRef = createNavigationContainerRef();
4
+ let goBackFn: (() => boolean) | null = null;
5
+ export function setGoBackImpl(fn: () => boolean) {
6
+ goBackFn = fn;
7
+ }
8
8
 
9
9
  export function closeCurrentScreen(): boolean {
10
- if (navigationRef.isReady() && navigationRef.canGoBack()) {
11
- navigationRef.goBack();
12
- return true;
13
- }
10
+ try {
11
+ if (goBackFn) return !!goBackFn();
12
+ } catch {}
14
13
  return false;
15
14
  }
16
15
 
@@ -30,7 +30,7 @@ function isBase64(input: string): boolean {
30
30
  }
31
31
 
32
32
  function base64ByteLength(b64: string): number {
33
- const cleaned = b64.replace(/=+$/, '');
33
+ const cleaned = b64.replace(/[=]+$/, '');
34
34
  return Math.floor((cleaned.length * 3) / 4);
35
35
  }
36
36