diff --git a/examples/base/.gitignore b/examples/base/.gitignore
index 8ee01d3..496df0a 100644
--- a/examples/base/.gitignore
+++ b/examples/base/.gitignore
@@ -1 +1,4 @@
+node_modules/
+dist/
yarn.lock
+package-lock.json
diff --git a/examples/base/index.tsx b/examples/base/index.tsx
deleted file mode 100644
index 6e88baa..0000000
--- a/examples/base/index.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'react-app-polyfill/ie11';
-import * as React from 'react';
-import { createRoot } from 'react-dom/client';
-
-import { App } from './src/App';
-
-const rootElement = document.getElementById('root')
-if (rootElement) {
- createRoot(rootElement).render();
-}
\ No newline at end of file
diff --git a/examples/base/package.json b/examples/base/package.json
index c020861..219605c 100644
--- a/examples/base/package.json
+++ b/examples/base/package.json
@@ -9,15 +9,15 @@
"preview": "vite preview --host"
},
"dependencies": {
- "@forward-software/react-auth": "2.0.3",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
+ "@forward-software/react-auth": "2.1.0",
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4"
},
"devDependencies": {
- "@types/react": "^18.2.21",
- "@types/react-dom": "^18.2.7",
- "@vitejs/plugin-react": "^4.0.0",
- "typescript": "^5.1.6",
- "vite": "^5.0.0"
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^6.0.0",
+ "typescript": "^6.0.0",
+ "vite": "^8.0.3"
}
}
diff --git a/examples/base/src/Content.tsx b/examples/base/src/Content.tsx
index 6179263..8046a07 100644
--- a/examples/base/src/Content.tsx
+++ b/examples/base/src/Content.tsx
@@ -1,4 +1,5 @@
-import { useCallback, useState } from 'react';
+import React, { useCallback, useState } from 'react';
+import type { DependencyList } from 'react';
import { useAuthClient } from './auth';
@@ -56,14 +57,16 @@ export const Content: React.FC = () => {
function useAsyncCallback Promise>(
callback: T,
- deps: React.DependencyList
+ deps: DependencyList
): [T, boolean] {
const [isLoading, setLoading] = useState(false);
const cb = useCallback(async (...argsx: never[]) => {
setLoading(true);
- const res = await callback(...argsx);
- setLoading(false);
- return res;
+ try {
+ return await callback(...argsx);
+ } finally {
+ setLoading(false);
+ }
}, deps) as T;
return [cb, isLoading];
diff --git a/examples/expo/package.json b/examples/expo/package.json
index 561c619..fe143e3 100644
--- a/examples/expo/package.json
+++ b/examples/expo/package.json
@@ -12,11 +12,11 @@
},
"dependencies": {
"@expo/vector-icons": "^15.0.2",
- "@forward-software/react-auth": "2.0.3",
+ "@forward-software/react-auth": "2.1.0",
"@react-navigation/bottom-tabs": "^7.4.0",
"@react-navigation/elements": "^2.6.3",
"@react-navigation/native": "^7.1.8",
- "axios": "^1.12.2",
+ "axios": "^1.14.0",
"expo": "~54.0.12",
"expo-constants": "~18.0.9",
"expo-dev-client": "~6.0.13",
@@ -46,7 +46,7 @@
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^9.25.0",
"eslint-config-expo": "~10.0.0",
- "typescript": "^5.1.6"
+ "typescript": "^6.0.0"
},
"private": true
}
diff --git a/examples/expo/src/auth/client.ts b/examples/expo/src/auth/client.ts
index fd4270a..e34036f 100644
--- a/examples/expo/src/auth/client.ts
+++ b/examples/expo/src/auth/client.ts
@@ -37,7 +37,7 @@ class MyAuthClient implements AuthClient {
async onLogin(credentials?: AuthCredentials): Promise {
if (!this.axiosAuthClient) {
- return Promise.reject('axios client not initialized!');
+ return Promise.reject(new Error('axios client not initialized!'));
}
// Replace auth/login with your url without the domain
@@ -54,7 +54,7 @@ class MyAuthClient implements AuthClient {
async onRefresh(currentTokens: AuthTokens): Promise {
if (!this.axiosAuthClient) {
- return Promise.reject('axios client not initialized!');
+ return Promise.reject(new Error('axios client not initialized!'));
}
if (
diff --git a/examples/expo/src/hooks/useAsyncCallback.ts b/examples/expo/src/hooks/useAsyncCallback.ts
index 3c1a4b2..4ee29f4 100644
--- a/examples/expo/src/hooks/useAsyncCallback.ts
+++ b/examples/expo/src/hooks/useAsyncCallback.ts
@@ -7,9 +7,11 @@ export function useAsyncCallback<
const cb = useCallback(async (...argsx: never[]) => {
setLoading(true);
- const res = await callback(...argsx);
- setLoading(false);
- return res;
+ try {
+ return await callback(...argsx);
+ } finally {
+ setLoading(false);
+ }
}, deps) as T;
return [cb, isLoading];
diff --git a/examples/refresh-token/.gitignore b/examples/refresh-token/.gitignore
index 8ee01d3..496df0a 100644
--- a/examples/refresh-token/.gitignore
+++ b/examples/refresh-token/.gitignore
@@ -1 +1,4 @@
+node_modules/
+dist/
yarn.lock
+package-lock.json
diff --git a/examples/refresh-token/index.tsx b/examples/refresh-token/index.tsx
deleted file mode 100644
index 6e88baa..0000000
--- a/examples/refresh-token/index.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'react-app-polyfill/ie11';
-import * as React from 'react';
-import { createRoot } from 'react-dom/client';
-
-import { App } from './src/App';
-
-const rootElement = document.getElementById('root')
-if (rootElement) {
- createRoot(rootElement).render();
-}
\ No newline at end of file
diff --git a/examples/refresh-token/package.json b/examples/refresh-token/package.json
index f7ccdf7..7732a5b 100644
--- a/examples/refresh-token/package.json
+++ b/examples/refresh-token/package.json
@@ -9,17 +9,17 @@
"preview": "vite preview --host"
},
"dependencies": {
- "@forward-software/react-auth": "2.0.3",
- "axios": "1.13.5",
+ "@forward-software/react-auth": "2.1.0",
+ "axios": "^1.14.0",
"jwt-check-expiry": "^1.0.10",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4"
},
"devDependencies": {
- "@types/react": "^18.2.21",
- "@types/react-dom": "^18.2.7",
- "@vitejs/plugin-react": "^4.0.0",
- "typescript": "^5.1.6",
- "vite": "^5.0.0"
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^6.0.0",
+ "typescript": "^6.0.0",
+ "vite": "^8.0.3"
}
}
diff --git a/examples/refresh-token/src/App.tsx b/examples/refresh-token/src/App.tsx
index 4f31dce..bd5c99e 100644
--- a/examples/refresh-token/src/App.tsx
+++ b/examples/refresh-token/src/App.tsx
@@ -1,7 +1,9 @@
+import React from 'react';
+
import AppContent from './AppContent';
import { AuthProvider } from './auth';
-export const App = () => {
+export const App: React.FC = () => {
return (
diff --git a/examples/refresh-token/src/AppContent.tsx b/examples/refresh-token/src/AppContent.tsx
index 99465d3..e79187b 100644
--- a/examples/refresh-token/src/AppContent.tsx
+++ b/examples/refresh-token/src/AppContent.tsx
@@ -1,5 +1,5 @@
-import * as React from 'react';
-import { DependencyList, FC, useCallback, useState } from 'react';
+import React, { FC, useCallback, useState } from 'react';
+import type { DependencyList } from 'react';
import { useAuthClient } from './auth';
function useUserCredentials() {
@@ -35,9 +35,11 @@ function useAsyncCallback Promise>(
const cb = useCallback(async (...argsx: never[]) => {
setLoading(true);
- const res = await callback(...argsx);
- setLoading(false);
- return res;
+ try {
+ return await callback(...argsx);
+ } finally {
+ setLoading(false);
+ }
}, deps) as T;
return [cb, isLoading];
diff --git a/examples/refresh-token/src/auth.ts b/examples/refresh-token/src/auth.ts
index ff497da..1134902 100644
--- a/examples/refresh-token/src/auth.ts
+++ b/examples/refresh-token/src/auth.ts
@@ -35,7 +35,7 @@ class MyAuthClient implements AuthClient {
async onLogin(credentials?: Credentials): Promise {
if (!this.axiosAuthClient) {
- return Promise.reject("axios client not initialized!");
+ return Promise.reject(new Error("axios client not initialized!"));
}
// Replace auth/login with your url without the domain
@@ -51,7 +51,7 @@ class MyAuthClient implements AuthClient {
async onRefresh(currentTokens: Tokens): Promise {
if (!this.axiosAuthClient) {
- return Promise.reject("axios client not initialized!");
+ return Promise.reject(new Error("axios client not initialized!"));
}
if (!!currentTokens.accessToken && !isJwtTokenExpired(currentTokens.accessToken)) {
diff --git a/examples/reqres/.gitignore b/examples/reqres/.gitignore
index 8ee01d3..496df0a 100644
--- a/examples/reqres/.gitignore
+++ b/examples/reqres/.gitignore
@@ -1 +1,4 @@
+node_modules/
+dist/
yarn.lock
+package-lock.json
diff --git a/examples/reqres/index.tsx b/examples/reqres/index.tsx
deleted file mode 100644
index 6e88baa..0000000
--- a/examples/reqres/index.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'react-app-polyfill/ie11';
-import * as React from 'react';
-import { createRoot } from 'react-dom/client';
-
-import { App } from './src/App';
-
-const rootElement = document.getElementById('root')
-if (rootElement) {
- createRoot(rootElement).render();
-}
\ No newline at end of file
diff --git a/examples/reqres/package.json b/examples/reqres/package.json
index 4cd6712..f4f64d0 100644
--- a/examples/reqres/package.json
+++ b/examples/reqres/package.json
@@ -9,16 +9,16 @@
"preview": "vite preview --host"
},
"dependencies": {
- "@forward-software/react-auth": "2.0.3",
- "axios": "^1.12.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
+ "@forward-software/react-auth": "2.1.0",
+ "axios": "^1.14.0",
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4"
},
"devDependencies": {
- "@types/react": "^18.2.21",
- "@types/react-dom": "^18.2.7",
- "@vitejs/plugin-react": "^4.0.0",
- "typescript": "^5.1.6",
- "vite": "^5.0.0"
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^6.0.0",
+ "typescript": "^6.0.0",
+ "vite": "^8.0.3"
}
}
diff --git a/examples/reqres/src/App.tsx b/examples/reqres/src/App.tsx
index c20ebd9..e5733db 100644
--- a/examples/reqres/src/App.tsx
+++ b/examples/reqres/src/App.tsx
@@ -1,4 +1,4 @@
-import * as React from 'react';
+import React from 'react';
import { AuthProvider } from './auth';
import { Content } from './Content';
diff --git a/examples/reqres/src/Content.tsx b/examples/reqres/src/Content.tsx
index b26defb..f3ae000 100644
--- a/examples/reqres/src/Content.tsx
+++ b/examples/reqres/src/Content.tsx
@@ -1,6 +1,5 @@
-import * as React from 'react';
-import { useCallback, useState } from 'react';
-import { DependencyList } from 'react';
+import React, { useCallback, useState } from 'react';
+import type { DependencyList } from 'react';
import { useAuthClient } from './auth';
@@ -110,9 +109,11 @@ function useAsyncCallback Promise>(
const [isLoading, setLoading] = useState(false);
const cb = useCallback(async (...argsx: never[]) => {
setLoading(true);
- const res = await callback(...argsx);
- setLoading(false);
- return res;
+ try {
+ return await callback(...argsx);
+ } finally {
+ setLoading(false);
+ }
}, deps) as T;
return [cb, isLoading];