@youversion/platform-react-hooks 1.6.1 → 1.7.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @youversion/platform-react-hooks@1.6.1 build /home/runner/work/platform-sdk-react/platform-sdk-react/packages/hooks
2
+ > @youversion/platform-react-hooks@1.7.0 build /home/runner/work/platform-sdk-react/platform-sdk-react/packages/hooks
3
3
  > tsc -p tsconfig.build.json
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @youversion/platform-react-hooks
2
2
 
3
+ ## 1.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a3e357e: feat(ui, hook): add sign in/out to bible reader
8
+ - Add sign in/out functionality to the BibleReader component
9
+ - Refactor auth hooks so redirectUri is optional (can be inferred from provider)
10
+ - New icons: gear.tsx and person.tsx for settings/auth UI
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [a3e357e]
15
+ - @youversion/platform-core@1.7.0
16
+
17
+ ## 1.6.2
18
+
19
+ ### Patch Changes
20
+
21
+ - 694325f: Removing CSS layers approach to prevent CSS conflicts when our components are added to existing apps with global styles.
22
+ - Updated dependencies [694325f]
23
+ - @youversion/platform-core@1.6.2
24
+
3
25
  ## 1.6.1
4
26
 
5
27
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"YouVersionAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/YouVersionAuthProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnE,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,eAAe,CAAC;AAElE,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,MAAM,EACN,QAAQ,GACT,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAsElD"}
1
+ {"version":3,"file":"YouVersionAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/YouVersionAuthProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnE,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,eAAe,CAAC;AAElE,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,MAAM,EACN,QAAQ,GACT,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAuElD"}
@@ -74,6 +74,7 @@ export default function YouVersionAuthProvider({ config, children, }) {
74
74
  setUserInfo,
75
75
  isLoading,
76
76
  error,
77
+ redirectUri: config.redirectUri,
77
78
  };
78
79
  return _jsx(YouVersionAuthContext.Provider, { value: value, children: children });
79
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"YouVersionAuthProvider.js","sourceRoot":"","sources":["../../src/context/YouVersionAuthProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"YouVersionAuthProvider.js","sourceRoot":"","sources":["../../src/context/YouVersionAuthProvider.tsx"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface AuthContextValue {
10
10
  setUserInfo: Dispatch<SetStateAction<YouVersionUserInfo | null>>;
11
11
  isLoading: boolean;
12
12
  error: Error | null;
13
+ redirectUri?: string;
13
14
  }
14
15
  export interface AuthProviderProps {
15
16
  config: AuthConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
@@ -1,13 +1,14 @@
1
1
  import { type AuthenticationState, type SignInWithYouVersionResult, type YouVersionUserInfo, type AuthenticationScopes } from '@youversion/platform-core';
2
2
  export interface UseYVAuthReturn {
3
3
  auth: AuthenticationState;
4
- signIn: (params: {
5
- redirectUrl: string;
4
+ signIn: (params?: {
5
+ redirectUrl?: string;
6
6
  scopes?: AuthenticationScopes[];
7
7
  }) => Promise<void>;
8
8
  signOut: () => void;
9
9
  processCallback: () => Promise<SignInWithYouVersionResult | null>;
10
10
  userInfo: YouVersionUserInfo | null;
11
+ redirectUri?: string;
11
12
  }
12
13
  /**
13
14
  * Comprehensive YouVersion authentication hook using vanilla React.
@@ -1 +1 @@
1
- {"version":3,"file":"useYVAuth.d.ts","sourceRoot":"","sources":["../src/useYVAuth.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,eAAe;IAE9B,IAAI,EAAE,mBAAmB,CAAC;IAG1B,MAAM,EAAE,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,eAAe,EAAE,MAAM,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IAGlE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAgB,SAAS,IAAI,eAAe,CA+D3C"}
1
+ {"version":3,"file":"useYVAuth.d.ts","sourceRoot":"","sources":["../src/useYVAuth.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,eAAe;IAE9B,IAAI,EAAE,mBAAmB,CAAC;IAG1B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,eAAe,EAAE,MAAM,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IAGlE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAGpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAgB,SAAS,IAAI,eAAe,CAsE3C"}
package/dist/useYVAuth.js CHANGED
@@ -86,7 +86,7 @@ import { useYouVersionAuthContext } from './context/YouVersionAuthContext';
86
86
  */
87
87
  export function useYVAuth() {
88
88
  // Get auth state from provider context
89
- const { userInfo, setUserInfo, isLoading, error } = useYouVersionAuthContext();
89
+ const { userInfo, setUserInfo, isLoading, error, redirectUri } = useYouVersionAuthContext();
90
90
  // Derive authentication state
91
91
  const isAuthenticated = !!userInfo;
92
92
  // Get current tokens for actions
@@ -100,15 +100,19 @@ export function useYVAuth() {
100
100
  return { accessToken: null, idToken: null };
101
101
  }, []);
102
102
  // Sign in function
103
- const signIn = useCallback(async ({ redirectUrl, scopes }) => {
104
- if (scopes) {
105
- await YouVersionAPIUsers.signIn(redirectUrl, scopes);
103
+ const signIn = useCallback(async (params) => {
104
+ const url = params?.redirectUrl ?? redirectUri;
105
+ if (!url) {
106
+ throw new Error('redirectUrl is required. Provide it via signIn params or configure redirectUri in the auth provider.');
107
+ }
108
+ if (params?.scopes) {
109
+ await YouVersionAPIUsers.signIn(url, params.scopes);
106
110
  }
107
111
  else {
108
- await YouVersionAPIUsers.signIn(redirectUrl);
112
+ await YouVersionAPIUsers.signIn(url);
109
113
  }
110
114
  // Note: This will redirect, so code after this won't execute
111
- }, []);
115
+ }, [redirectUri]);
112
116
  // Process callback function
113
117
  const processCallback = useCallback(async () => {
114
118
  const result = await YouVersionAPIUsers.handleAuthCallback();
@@ -134,6 +138,7 @@ export function useYVAuth() {
134
138
  signOut,
135
139
  processCallback,
136
140
  userInfo,
141
+ redirectUri,
137
142
  };
138
143
  }
139
144
  //# sourceMappingURL=useYVAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useYVAuth.js","sourceRoot":"","sources":["../src/useYVAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,+BAA+B,GAKhC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAiB3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,MAAM,UAAU,SAAS;IACvB,uCAAuC;IACvC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAE/E,8BAA8B;IAC9B,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC;IAEnC,iCAAiC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;gBACL,WAAW,EAAE,+BAA+B,CAAC,WAAW;gBACxD,OAAO,EAAE,+BAA+B,CAAC,OAAO;aACjD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mBAAmB;IACnB,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAA4D,EAAE,EAAE;QAC1F,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,6DAA6D;IAC/D,CAAC,EACD,EAAE,CACH,CAAC;IAEF,4BAA4B;IAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAgD,EAAE;QACzF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oBAAoB;IACpB,MAAM,IAAI,GAAwB,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC;QACL,eAAe;QACf,SAAS;QACT,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,IAAI;QACZ,KAAK;KACN,CAAC,EACF,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAChF,CAAC;IAEF,oBAAoB;IACpB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,+BAA+B,CAAC,eAAe,EAAE,CAAC;QAClD,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,IAAI;QACJ,MAAM;QACN,OAAO;QACP,eAAe;QACf,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useYVAuth.js","sourceRoot":"","sources":["../src/useYVAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,+BAA+B,GAKhC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAoB3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,MAAM,UAAU,SAAS;IACvB,uCAAuC;IACvC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAE5F,8BAA8B;IAC9B,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC;IAEnC,iCAAiC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;gBACL,WAAW,EAAE,+BAA+B,CAAC,WAAW;gBACxD,OAAO,EAAE,+BAA+B,CAAC,OAAO;aACjD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mBAAmB;IACnB,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,MAAkE,EAAE,EAAE;QAC3E,MAAM,GAAG,GAAG,MAAM,EAAE,WAAW,IAAI,WAAW,CAAC;QAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,6DAA6D;IAC/D,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,4BAA4B;IAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAgD,EAAE;QACzF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oBAAoB;IACpB,MAAM,IAAI,GAAwB,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC;QACL,eAAe;QACf,SAAS;QACT,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,IAAI;QACZ,KAAK;KACN,CAAC,EACF,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAChF,CAAC;IAEF,oBAAoB;IACpB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,+BAA+B,CAAC,eAAe,EAAE,CAAC;QAClD,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,IAAI;QACJ,MAAM;QACN,OAAO;QACP,eAAe;QACf,QAAQ;QACR,WAAW;KACZ,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@youversion/platform-react-hooks",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "dependencies": {
25
- "@youversion/platform-core": "1.6.1"
25
+ "@youversion/platform-core": "1.7.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=19.1.0 <20.0.0"
@@ -84,6 +84,7 @@ export default function YouVersionAuthProvider({
84
84
  setUserInfo,
85
85
  isLoading,
86
86
  error,
87
+ redirectUri: config.redirectUri,
87
88
  };
88
89
 
89
90
  return <YouVersionAuthContext.Provider value={value}>{children}</YouVersionAuthContext.Provider>;
package/src/types/auth.ts CHANGED
@@ -12,6 +12,7 @@ export interface AuthContextValue {
12
12
  setUserInfo: Dispatch<SetStateAction<YouVersionUserInfo | null>>;
13
13
  isLoading: boolean;
14
14
  error: Error | null;
15
+ redirectUri?: string;
15
16
  }
16
17
 
17
18
  export interface AuthProviderProps {
@@ -150,7 +150,7 @@ const renderAuthHook = async () => {
150
150
 
151
151
  describe('useYVAuth', () => {
152
152
  beforeEach(() => {
153
- vi.clearAllMocks();
153
+ vi.resetAllMocks();
154
154
 
155
155
  // Setup window mock
156
156
  vi.stubGlobal('window', mockWindow);
@@ -248,6 +248,30 @@ describe('useYVAuth', () => {
248
248
  }),
249
249
  ).rejects.toThrow('Sign in failed');
250
250
  });
251
+
252
+ it('should use redirectUri from provider when redirectUrl is not passed', async () => {
253
+ const { result } = await renderAuthHook();
254
+
255
+ await act(async () => {
256
+ await result.current.signIn();
257
+ });
258
+
259
+ expect(vi.mocked(YouVersionAPIUsers.signIn)).toHaveBeenCalledWith('http://test.example.com');
260
+ });
261
+
262
+ it('should use redirectUri from provider with scopes when redirectUrl is not passed', async () => {
263
+ const { result } = await renderAuthHook();
264
+ const scopes: AuthenticationScopes[] = ['profile', 'email'];
265
+
266
+ await act(async () => {
267
+ await result.current.signIn({ scopes });
268
+ });
269
+
270
+ expect(vi.mocked(YouVersionAPIUsers.signIn)).toHaveBeenCalledWith(
271
+ 'http://test.example.com',
272
+ scopes,
273
+ );
274
+ });
251
275
  });
252
276
 
253
277
  describe('processCallback', () => {
package/src/useYVAuth.ts CHANGED
@@ -14,7 +14,7 @@ export interface UseYVAuthReturn {
14
14
  auth: AuthenticationState;
15
15
 
16
16
  // Actions
17
- signIn: (params: { redirectUrl: string; scopes?: AuthenticationScopes[] }) => Promise<void>;
17
+ signIn: (params?: { redirectUrl?: string; scopes?: AuthenticationScopes[] }) => Promise<void>;
18
18
  signOut: () => void;
19
19
 
20
20
  // Callback processing (for callback page) - caches user info
@@ -22,6 +22,9 @@ export interface UseYVAuthReturn {
22
22
 
23
23
  // Cached user info (populated after successful callback)
24
24
  userInfo: YouVersionUserInfo | null;
25
+
26
+ // Redirect URI from provider config
27
+ redirectUri?: string;
25
28
  }
26
29
 
27
30
  /**
@@ -109,7 +112,7 @@ export interface UseYVAuthReturn {
109
112
  */
110
113
  export function useYVAuth(): UseYVAuthReturn {
111
114
  // Get auth state from provider context
112
- const { userInfo, setUserInfo, isLoading, error } = useYouVersionAuthContext();
115
+ const { userInfo, setUserInfo, isLoading, error, redirectUri } = useYouVersionAuthContext();
113
116
 
114
117
  // Derive authentication state
115
118
  const isAuthenticated = !!userInfo;
@@ -127,15 +130,21 @@ export function useYVAuth(): UseYVAuthReturn {
127
130
 
128
131
  // Sign in function
129
132
  const signIn = useCallback(
130
- async ({ redirectUrl, scopes }: { redirectUrl: string; scopes?: AuthenticationScopes[] }) => {
131
- if (scopes) {
132
- await YouVersionAPIUsers.signIn(redirectUrl, scopes);
133
+ async (params?: { redirectUrl?: string; scopes?: AuthenticationScopes[] }) => {
134
+ const url = params?.redirectUrl ?? redirectUri;
135
+ if (!url) {
136
+ throw new Error(
137
+ 'redirectUrl is required. Provide it via signIn params or configure redirectUri in the auth provider.',
138
+ );
139
+ }
140
+ if (params?.scopes) {
141
+ await YouVersionAPIUsers.signIn(url, params.scopes);
133
142
  } else {
134
- await YouVersionAPIUsers.signIn(redirectUrl);
143
+ await YouVersionAPIUsers.signIn(url);
135
144
  }
136
145
  // Note: This will redirect, so code after this won't execute
137
146
  },
138
- [],
147
+ [redirectUri],
139
148
  );
140
149
 
141
150
  // Process callback function
@@ -169,5 +178,6 @@ export function useYVAuth(): UseYVAuthReturn {
169
178
  signOut,
170
179
  processCallback,
171
180
  userInfo,
181
+ redirectUri,
172
182
  };
173
183
  }