@explorins/pers-sdk-react-native 2.3.6 → 2.3.8
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 +1266 -1244
- package/dist/__tests__/PersSDKProvider.test.js +33 -0
- package/dist/hooks/useBusiness.d.ts +2 -2
- package/dist/hooks/useBusiness.d.ts.map +1 -1
- package/dist/hooks/useBusiness.js +2 -2
- package/dist/hooks/useIPFSUrl.d.ts +3 -3
- package/dist/hooks/useIPFSUrl.d.ts.map +1 -1
- package/dist/hooks/useIPFSUrl.js +7 -7
- package/dist/hooks/useTransactions.d.ts.map +1 -1
- package/dist/hooks/useTransactions.js +13 -5
- package/dist/hooks/useWeb3.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2412 -492
- package/dist/index.js.map +1 -1
- package/dist/providers/PersSDKProvider.d.ts +4 -0
- package/dist/providers/PersSDKProvider.d.ts.map +1 -1
- package/dist/providers/PersSDKProvider.js +14 -0
- package/dist/providers/react-native-http-client.d.ts +2 -0
- package/dist/providers/react-native-http-client.d.ts.map +1 -1
- package/dist/providers/react-native-http-client.js +5 -2
- package/dist/storage/rn-secure-storage.d.ts.map +1 -1
- package/dist/storage/rn-secure-storage.js +21 -8
- package/package.json +3 -3
- package/src/__tests__/PersSDKProvider.test.tsx +484 -420
- package/src/__tests__/setup.ts +40 -40
- package/src/hooks/index.ts +60 -60
- package/src/hooks/useAnalytics.ts +327 -327
- package/src/hooks/useAuth.ts +265 -265
- package/src/hooks/useBookings.ts +191 -191
- package/src/hooks/useBusiness.ts +251 -251
- package/src/hooks/useCampaigns.ts +500 -500
- package/src/hooks/useDonations.ts +66 -66
- package/src/hooks/useEvents.ts +372 -372
- package/src/hooks/useFiles.ts +155 -155
- package/src/hooks/useIPFSUrl.ts +192 -192
- package/src/hooks/usePurchases.ts +65 -65
- package/src/hooks/useRedemptions.ts +467 -467
- package/src/hooks/useTenants.ts +72 -72
- package/src/hooks/useTokenBalances.ts +385 -385
- package/src/hooks/useTokens.ts +313 -313
- package/src/hooks/useTransactionSigner.ts +611 -611
- package/src/hooks/useTransactions.ts +299 -290
- package/src/hooks/useTriggerSources.ts +301 -301
- package/src/hooks/useUserStatus.ts +61 -61
- package/src/hooks/useUsers.ts +167 -167
- package/src/hooks/useWeb3.ts +355 -355
- package/src/index.ts +777 -774
- package/src/polyfills/index.ts +160 -160
- package/src/polyfills/web3-polyfills.ts +97 -97
- package/src/providers/PersSDKProvider.tsx +393 -374
- package/src/providers/react-native-auth-provider.ts +110 -110
- package/src/providers/react-native-http-client.ts +150 -145
- package/src/providers/rn-dpop-provider.ts +190 -190
- package/src/storage/async-storage-token-storage.ts +185 -185
- package/src/storage/rn-secure-storage.ts +182 -170
- package/src/types/react-native-globals.d.ts +45 -45
- package/src/utils/index.ts +8 -8
- package/src/utils/platform-detection.ts +86 -86
- package/dist/index-CzLxqePZ.js +0 -7717
- package/dist/index-CzLxqePZ.js.map +0 -1
|
@@ -51,7 +51,11 @@ export interface PersSDKContext {
|
|
|
51
51
|
isInitialized: boolean;
|
|
52
52
|
isAuthenticated: boolean;
|
|
53
53
|
user: UserDTO | AdminDTO | null;
|
|
54
|
+
/** Content locale in effect (normalized BCP 47 tag), or null when localization is off */
|
|
55
|
+
locale: string | null;
|
|
54
56
|
initialize: (config: PersConfig) => Promise<void>;
|
|
57
|
+
/** Change the content locale (`'auto'`, a BCP 47 tag, or null). Refetch content afterwards. */
|
|
58
|
+
setLocale: (locale: string | null) => void;
|
|
55
59
|
setAuthenticationState: (user: UserDTO | AdminDTO | null, isAuthenticated: boolean) => void;
|
|
56
60
|
refreshUserData: () => Promise<void>;
|
|
57
61
|
restoreSession: () => Promise<UserDTO | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersSDKProvider.d.ts","sourceRoot":"","sources":["../../src/providers/PersSDKProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuC,SAAS,EAA2C,MAAM,OAAO,CAAC;AAEvH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAmB3D,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,WAAW,cAAc;IAE7B,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAGpB,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAGzC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PersSDKProvider.d.ts","sourceRoot":"","sources":["../../src/providers/PersSDKProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuC,SAAS,EAA2C,MAAM,OAAO,CAAC;AAEvH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAmB3D,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,WAAW,cAAc;IAE7B,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAGpB,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAGzC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IAChC,yFAAyF;IACzF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtB,UAAU,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,+FAA+F;IAC/F,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,sBAAsB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5F,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC/C;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CA8PA,CAAC;AAGF,eAAO,MAAM,UAAU,QAAO,cAQ7B,CAAC"}
|
|
@@ -49,6 +49,7 @@ export const PersSDKProvider = ({ children, config }) => {
|
|
|
49
49
|
const [isInitialized, setIsInitialized] = useState(false);
|
|
50
50
|
const [isAuthenticated, setIsAuthenticated] = useState(false);
|
|
51
51
|
const [user, setUser] = useState(null);
|
|
52
|
+
const [locale, setLocaleState] = useState(null);
|
|
52
53
|
// Keep state refs in sync immediately (not in useEffect to avoid race conditions)
|
|
53
54
|
sdkRef.current = sdk;
|
|
54
55
|
isInitializedRef.current = isInitialized;
|
|
@@ -126,6 +127,7 @@ export const PersSDKProvider = ({ children, config }) => {
|
|
|
126
127
|
}, { domains: ['authentication'], replay: true });
|
|
127
128
|
setAuthProvider(authProvider);
|
|
128
129
|
setSdk(sdkInstance);
|
|
130
|
+
setLocaleState(sdkInstance.getLocale());
|
|
129
131
|
setIsInitialized(true);
|
|
130
132
|
}
|
|
131
133
|
catch (error) {
|
|
@@ -158,6 +160,14 @@ export const PersSDKProvider = ({ children, config }) => {
|
|
|
158
160
|
});
|
|
159
161
|
}
|
|
160
162
|
}, [config, isInitialized, initialize]);
|
|
163
|
+
const setLocale = useCallback((next) => {
|
|
164
|
+
const currentSdk = sdkRef.current;
|
|
165
|
+
if (!currentSdk) {
|
|
166
|
+
throw new Error('SDK not initialized. Call initialize() first.');
|
|
167
|
+
}
|
|
168
|
+
currentSdk.setLocale(next);
|
|
169
|
+
setLocaleState(currentSdk.getLocale());
|
|
170
|
+
}, []);
|
|
161
171
|
const refreshUserData = useCallback(async () => {
|
|
162
172
|
// Read from refs to get current values
|
|
163
173
|
const currentSdk = sdkRef.current;
|
|
@@ -224,8 +234,10 @@ export const PersSDKProvider = ({ children, config }) => {
|
|
|
224
234
|
isInitialized,
|
|
225
235
|
isAuthenticated,
|
|
226
236
|
user,
|
|
237
|
+
locale,
|
|
227
238
|
// Methods - expose functions directly, not through refs
|
|
228
239
|
initialize,
|
|
240
|
+
setLocale,
|
|
229
241
|
setAuthenticationState,
|
|
230
242
|
refreshUserData,
|
|
231
243
|
restoreSession,
|
|
@@ -235,7 +247,9 @@ export const PersSDKProvider = ({ children, config }) => {
|
|
|
235
247
|
isInitialized,
|
|
236
248
|
isAuthenticated,
|
|
237
249
|
user,
|
|
250
|
+
locale,
|
|
238
251
|
initialize,
|
|
252
|
+
setLocale,
|
|
239
253
|
setAuthenticationState,
|
|
240
254
|
refreshUserData,
|
|
241
255
|
restoreSession
|
|
@@ -29,6 +29,7 @@ export interface HttpClient {
|
|
|
29
29
|
get<T>(url: string, options?: RequestOptions): Promise<T>;
|
|
30
30
|
post<T>(url: string, body: any, options?: RequestOptions): Promise<T>;
|
|
31
31
|
put<T>(url: string, body: any, options?: RequestOptions): Promise<T>;
|
|
32
|
+
patch<T>(url: string, body: any, options?: RequestOptions): Promise<T>;
|
|
32
33
|
delete<T>(url: string, options?: RequestOptions): Promise<T>;
|
|
33
34
|
}
|
|
34
35
|
export declare class ReactNativeHttpClient implements HttpClient {
|
|
@@ -37,6 +38,7 @@ export declare class ReactNativeHttpClient implements HttpClient {
|
|
|
37
38
|
get<T = any>(url: string, options?: RequestOptions): Promise<T>;
|
|
38
39
|
post<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
|
|
39
40
|
put<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
|
|
41
|
+
patch<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
|
|
40
42
|
delete<T = any>(url: string, options?: RequestOptions): Promise<T>;
|
|
41
43
|
private request;
|
|
42
44
|
private buildUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native-http-client.d.ts","sourceRoot":"","sources":["../../src/providers/react-native-http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9D;AAED,qBAAa,qBAAsB,YAAW,UAAU;IACtD,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,CAAC,EAAE,MAAM;IAItB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/D,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5E,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3E,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAI1D,OAAO;IAwErB,OAAO,CAAC,QAAQ;CAcjB"}
|
|
1
|
+
{"version":3,"file":"react-native-http-client.d.ts","sourceRoot":"","sources":["../../src/providers/react-native-http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9D;AAED,qBAAa,qBAAsB,YAAW,UAAU;IACtD,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,CAAC,EAAE,MAAM;IAItB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/D,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5E,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3E,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7E,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAI1D,OAAO;IAwErB,OAAO,CAAC,QAAQ;CAcjB"}
|
|
@@ -17,6 +17,9 @@ export class ReactNativeHttpClient {
|
|
|
17
17
|
async put(url, body, options) {
|
|
18
18
|
return this.request('PUT', url, body, options);
|
|
19
19
|
}
|
|
20
|
+
async patch(url, body, options) {
|
|
21
|
+
return this.request('PATCH', url, body, options);
|
|
22
|
+
}
|
|
20
23
|
async delete(url, options) {
|
|
21
24
|
return this.request('DELETE', url, undefined, options);
|
|
22
25
|
}
|
|
@@ -35,8 +38,8 @@ export class ReactNativeHttpClient {
|
|
|
35
38
|
config.signal = controller.signal;
|
|
36
39
|
setTimeout(() => controller.abort(), options.timeout);
|
|
37
40
|
}
|
|
38
|
-
// Add body for POST/PUT requests
|
|
39
|
-
if (body && (method === 'POST' || method === 'PUT')) {
|
|
41
|
+
// Add body for POST/PUT/PATCH requests
|
|
42
|
+
if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
|
|
40
43
|
config.body = JSON.stringify(body);
|
|
41
44
|
}
|
|
42
45
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn-secure-storage.d.ts","sourceRoot":"","sources":["../../src/storage/rn-secure-storage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAalC;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAc/C,OAAO,CAAC,SAAS;IAZ7B,QAAQ,CAAC,eAAe,SAAS;IAGjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAKzB;IAEH,OAAO,CAAC,eAAe,CAA2B;gBAE9B,SAAS,GAAE,MAAuB;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"rn-secure-storage.d.ts","sourceRoot":"","sources":["../../src/storage/rn-secure-storage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAalC;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAc/C,OAAO,CAAC,SAAS;IAZ7B,QAAQ,CAAC,eAAe,SAAS;IAGjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAKzB;IAEH,OAAO,CAAC,eAAe,CAA2B;gBAE9B,SAAS,GAAE,MAAuB;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA8CzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC5B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,QAAQ;CAOjB"}
|
|
@@ -59,17 +59,30 @@ export class ReactNativeSecureStorage {
|
|
|
59
59
|
async get(key) {
|
|
60
60
|
const prefixedKey = this.getKeyName(key);
|
|
61
61
|
if (this.SECURE_KEYS.has(key)) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
// The iOS Keychain can be briefly unreadable (device locked, background launch), so retry before giving up
|
|
63
|
+
let keychainError;
|
|
64
|
+
if (Keychain) {
|
|
65
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
66
|
+
try {
|
|
67
|
+
const credentials = await Keychain.getGenericPassword({ service: prefixedKey });
|
|
68
|
+
if (credentials) {
|
|
69
|
+
return this.tryParse(credentials.password);
|
|
70
|
+
}
|
|
71
|
+
keychainError = undefined;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
keychainError = e;
|
|
76
|
+
if (attempt < 2)
|
|
77
|
+
await new Promise(resolve => setTimeout(resolve, 150 * (attempt + 1)));
|
|
67
78
|
}
|
|
68
79
|
}
|
|
69
80
|
}
|
|
70
|
-
|
|
71
|
-
console.warn(`[ReactNativeSecureStorage] Failed to access keychain for ${key}`,
|
|
72
|
-
//
|
|
81
|
+
if (keychainError) {
|
|
82
|
+
console.warn(`[ReactNativeSecureStorage] Failed to access keychain for ${key}`, keychainError);
|
|
83
|
+
// Returning "missing" here would make the DPoP manager regenerate the key pair and log the user out
|
|
84
|
+
if (key === DPOP_STORAGE_KEYS.PRIVATE)
|
|
85
|
+
throw keychainError;
|
|
73
86
|
}
|
|
74
87
|
// Fallback: Check AsyncStorage if not found in Keychain or Keychain failed
|
|
75
88
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorins/pers-sdk-react-native",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "React Native SDK for PERS Platform - Tourism Loyalty System with Blockchain Transaction Signing and WebAuthn Authentication",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"author": "eXplorins",
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@explorins/pers-sdk": "^2.3.
|
|
40
|
+
"@explorins/pers-sdk": "^2.3.38",
|
|
41
41
|
"@explorins/pers-signer": "^1.0.34",
|
|
42
42
|
"buffer": "^6.0.3",
|
|
43
43
|
"ethers": "^6.15.0",
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"@ethersproject/scrypt": false
|
|
167
167
|
},
|
|
168
168
|
"devDependencies": {
|
|
169
|
-
"@explorins/pers-shared": "^2.1.
|
|
169
|
+
"@explorins/pers-shared": "^2.1.224",
|
|
170
170
|
"@react-native-async-storage/async-storage": "^3.0.2",
|
|
171
171
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
172
172
|
"@rollup/plugin-json": "^6.1.0",
|