@chanomhub/sdk 1.1.2 → 1.1.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 +81 -0
- package/dist/__tests__/auth.test.js +91 -0
- package/dist/__tests__/auth.test.js.map +1 -1
- package/dist/repositories/authRepository.d.ts +40 -5
- package/dist/repositories/authRepository.d.ts.map +1 -1
- package/dist/repositories/authRepository.js +149 -2
- package/dist/repositories/authRepository.js.map +1 -1
- package/dist/types/auth.d.ts +43 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -209,6 +209,87 @@ await sdk.auth.signOut();
|
|
|
209
209
|
const session = await sdk.auth.getSupabaseSession();
|
|
210
210
|
```
|
|
211
211
|
|
|
212
|
+
### OAuth for React Native (Pure RN / Without Expo)
|
|
213
|
+
|
|
214
|
+
For React Native apps, install `react-native-app-auth`:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
npm install @chanomhub/sdk react-native-app-auth
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Configure and use native OAuth:
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
import { createChanomhubClient } from '@chanomhub/sdk';
|
|
224
|
+
|
|
225
|
+
const sdk = createChanomhubClient();
|
|
226
|
+
|
|
227
|
+
// Google Sign-In for React Native
|
|
228
|
+
const result = await sdk.auth.signInWithGoogleNative({
|
|
229
|
+
googleClientId: 'YOUR_GOOGLE_CLIENT_ID.apps.googleusercontent.com',
|
|
230
|
+
googleIosClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', // Optional
|
|
231
|
+
redirectUri: 'com.yourapp://oauth',
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
if (result) {
|
|
235
|
+
// result contains: { user, token, refreshToken }
|
|
236
|
+
console.log('Logged in as:', result.user.username);
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Other providers:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
// Discord
|
|
244
|
+
await sdk.auth.signInWithProviderNative('discord', {
|
|
245
|
+
discordClientId: 'YOUR_DISCORD_CLIENT_ID',
|
|
246
|
+
redirectUri: 'com.yourapp://oauth',
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// GitHub
|
|
250
|
+
await sdk.auth.signInWithProviderNative('github', {
|
|
251
|
+
githubClientId: 'YOUR_GITHUB_CLIENT_ID',
|
|
252
|
+
redirectUri: 'com.yourapp://oauth',
|
|
253
|
+
});
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
If you handle OAuth flow yourself:
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import { authorize } from 'react-native-app-auth';
|
|
260
|
+
|
|
261
|
+
// Use your own OAuth config
|
|
262
|
+
const oauthResult = await authorize(myConfig);
|
|
263
|
+
|
|
264
|
+
// Exchange with backend
|
|
265
|
+
const loginResult = await sdk.auth.exchangeOAuthToken(oauthResult);
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Electron / Server-side OAuth
|
|
269
|
+
|
|
270
|
+
For environments where you need to handle the OAuth redirect manually (e.g., Electron, CLI):
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
// 1. Get the OAuth URL
|
|
274
|
+
const options = {
|
|
275
|
+
skipBrowserRedirect: true,
|
|
276
|
+
redirectTo: 'myapp://oauth-callback',
|
|
277
|
+
scopes: 'email profile', // Optional
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const { url } = await sdk.auth.signInWithGoogle(options);
|
|
281
|
+
// OR generic provider:
|
|
282
|
+
// const { url } = await sdk.auth.signInWithProvider('github', options);
|
|
283
|
+
|
|
284
|
+
if (url) {
|
|
285
|
+
// 2. Open URL in external browser/window (Electron example)
|
|
286
|
+
// shell.openExternal(url);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// 3. In your app's deep link handler, process the returned code/token
|
|
290
|
+
// This depends on how you handle deep links in Electron
|
|
291
|
+
```
|
|
292
|
+
|
|
212
293
|
---
|
|
213
294
|
|
|
214
295
|
## 📁 Project Structure
|
|
@@ -75,5 +75,96 @@ const authRepository_1 = require("../repositories/authRepository");
|
|
|
75
75
|
(0, vitest_1.expect)(session).toBeNull();
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
|
+
// ============================================
|
|
79
|
+
// React Native OAuth Tests
|
|
80
|
+
// ============================================
|
|
81
|
+
(0, vitest_1.describe)('signInWithGoogleNative', () => {
|
|
82
|
+
(0, vitest_1.it)('should throw error when googleClientId is not provided', async () => {
|
|
83
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
84
|
+
await (0, vitest_1.expect)(auth.signInWithGoogleNative({ redirectUri: 'com.app://oauth' })).rejects.toThrow('Missing client ID for google');
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.it)('should throw error when redirectUri is not provided', async () => {
|
|
87
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
88
|
+
await (0, vitest_1.expect)(auth.signInWithGoogleNative({
|
|
89
|
+
googleClientId: 'test-client-id',
|
|
90
|
+
redirectUri: '',
|
|
91
|
+
})).rejects.toThrow('Missing redirectUri');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.describe)('signInWithProviderNative', () => {
|
|
95
|
+
(0, vitest_1.it)('should throw error when discordClientId is missing for discord', async () => {
|
|
96
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
97
|
+
await (0, vitest_1.expect)(auth.signInWithProviderNative('discord', { redirectUri: 'com.app://oauth' })).rejects.toThrow('Missing client ID for discord');
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.it)('should throw error when githubClientId is missing for github', async () => {
|
|
100
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
101
|
+
await (0, vitest_1.expect)(auth.signInWithProviderNative('github', { redirectUri: 'com.app://oauth' })).rejects.toThrow('Missing client ID for github');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.describe)('exchangeOAuthToken', () => {
|
|
105
|
+
(0, vitest_1.it)('should exchange OAuth token with backend', async () => {
|
|
106
|
+
mockFetcher.mockResolvedValue({
|
|
107
|
+
data: {
|
|
108
|
+
user: { id: 1, username: 'test' },
|
|
109
|
+
token: 'backend-token',
|
|
110
|
+
refreshToken: 'backend-refresh',
|
|
111
|
+
},
|
|
112
|
+
error: undefined,
|
|
113
|
+
});
|
|
114
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
115
|
+
const result = await auth.exchangeOAuthToken({
|
|
116
|
+
accessToken: 'oauth-access-token',
|
|
117
|
+
idToken: 'google-id-token',
|
|
118
|
+
});
|
|
119
|
+
(0, vitest_1.expect)(mockFetcher).toHaveBeenCalledWith('/api/users/login-oauth', {
|
|
120
|
+
method: 'POST',
|
|
121
|
+
body: {
|
|
122
|
+
accessToken: 'google-id-token', // Uses idToken when available
|
|
123
|
+
provider: 'google',
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.expect)(result).toEqual({
|
|
127
|
+
user: { id: 1, username: 'test' },
|
|
128
|
+
token: 'backend-token',
|
|
129
|
+
refreshToken: 'backend-refresh',
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
(0, vitest_1.it)('should use accessToken when idToken is not available', async () => {
|
|
133
|
+
mockFetcher.mockResolvedValue({
|
|
134
|
+
data: { user: { id: 1 }, token: 'token', refreshToken: 'refresh' },
|
|
135
|
+
error: undefined,
|
|
136
|
+
});
|
|
137
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
138
|
+
await auth.exchangeOAuthToken({ accessToken: 'discord-token' });
|
|
139
|
+
(0, vitest_1.expect)(mockFetcher).toHaveBeenCalledWith('/api/users/login-oauth', {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
body: {
|
|
142
|
+
accessToken: 'discord-token',
|
|
143
|
+
provider: 'oauth',
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.it)('should return null when no token available', async () => {
|
|
148
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
149
|
+
const result = await auth.exchangeOAuthToken({ accessToken: '' });
|
|
150
|
+
(0, vitest_1.expect)(result).toBeNull();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
// ============================================
|
|
154
|
+
// Electron / Server-side OAuth Tests
|
|
155
|
+
// ============================================
|
|
156
|
+
(0, vitest_1.describe)('getOAuthUrl', () => {
|
|
157
|
+
(0, vitest_1.it)('should return OAuth URL when Supabase is configured', async () => {
|
|
158
|
+
config.supabaseUrl = 'https://test.supabase.co';
|
|
159
|
+
config.supabaseAnonKey = 'test-key';
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
161
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
162
|
+
// Mock Supabase client setup would go here
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.it)('should have getOAuthUrl method', () => {
|
|
166
|
+
const auth = (0, authRepository_1.createAuthRepository)(mockFetcher, config);
|
|
167
|
+
(0, vitest_1.expect)(typeof auth.getOAuthUrl).toBe('function');
|
|
168
|
+
});
|
|
78
169
|
});
|
|
79
170
|
//# sourceMappingURL=auth.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../__tests__/auth.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../__tests__/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,18 +5,53 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { ChanomhubConfig } from '../config';
|
|
7
7
|
import type { RestFetcher } from '../client';
|
|
8
|
-
import type { OAuthProvider, OAuthOptions, LoginResponse, RefreshResponse, SupabaseSession } from '../types/auth';
|
|
8
|
+
import type { OAuthProvider, OAuthOptions, LoginResponse, RefreshResponse, SupabaseSession, NativeOAuthConfig, NativeOAuthOptions, NativeOAuthResult } from '../types/auth';
|
|
9
9
|
export interface AuthRepository {
|
|
10
10
|
/** Check if Supabase OAuth is configured and available */
|
|
11
11
|
isOAuthEnabled(): boolean;
|
|
12
|
-
/** Sign in with Google OAuth - redirects to Google login page */
|
|
13
|
-
signInWithGoogle(options?: OAuthOptions): Promise<
|
|
12
|
+
/** Sign in with Google OAuth - redirects to Google login page (Web only) */
|
|
13
|
+
signInWithGoogle(options?: OAuthOptions): Promise<{
|
|
14
|
+
url: string | null;
|
|
15
|
+
}>;
|
|
14
16
|
/** Sign in with any supported OAuth provider */
|
|
15
|
-
signInWithProvider(provider: OAuthProvider, options?: OAuthOptions): Promise<
|
|
17
|
+
signInWithProvider(provider: OAuthProvider, options?: OAuthOptions): Promise<{
|
|
18
|
+
url: string | null;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Get the OAuth URL for manual redirect handling (Electron, etc.)
|
|
22
|
+
* @param provider - OAuth provider
|
|
23
|
+
* @param options - OAuth options
|
|
24
|
+
* @returns OAuth URL string
|
|
25
|
+
*/
|
|
26
|
+
getOAuthUrl(provider: OAuthProvider, options?: OAuthOptions): Promise<string | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Sign in with Google OAuth for React Native apps.
|
|
29
|
+
* Uses react-native-app-auth under the hood.
|
|
30
|
+
* @param nativeConfig - Native OAuth configuration with client IDs and redirect URI
|
|
31
|
+
* @param options - Additional options like scopes
|
|
32
|
+
* @returns Login response with user and tokens from backend
|
|
33
|
+
*/
|
|
34
|
+
signInWithGoogleNative(nativeConfig: NativeOAuthConfig, options?: NativeOAuthOptions): Promise<LoginResponse | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Sign in with any OAuth provider for React Native apps.
|
|
37
|
+
* Uses react-native-app-auth under the hood.
|
|
38
|
+
* @param provider - OAuth provider (google, discord, github)
|
|
39
|
+
* @param nativeConfig - Native OAuth configuration
|
|
40
|
+
* @param options - Additional options
|
|
41
|
+
* @returns Login response with user and tokens from backend
|
|
42
|
+
*/
|
|
43
|
+
signInWithProviderNative(provider: OAuthProvider, nativeConfig: NativeOAuthConfig, options?: NativeOAuthOptions): Promise<LoginResponse | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Exchange OAuth token from react-native-app-auth with backend.
|
|
46
|
+
* Use this if you handle the OAuth flow yourself.
|
|
47
|
+
* @param oauthResult - Result from react-native-app-auth authorize()
|
|
48
|
+
* @returns Login response with user and backend tokens
|
|
49
|
+
*/
|
|
50
|
+
exchangeOAuthToken(oauthResult: NativeOAuthResult): Promise<LoginResponse | null>;
|
|
16
51
|
/**
|
|
17
52
|
* Handle OAuth callback after redirect back from provider.
|
|
18
53
|
* Exchanges Supabase access token for backend JWT.
|
|
19
|
-
* Call this on your OAuth callback page.
|
|
54
|
+
* Call this on your OAuth callback page (Web only).
|
|
20
55
|
*/
|
|
21
56
|
handleCallback(): Promise<LoginResponse | null>;
|
|
22
57
|
/** Sign out from Supabase (clears Supabase session only) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authRepository.d.ts","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,
|
|
1
|
+
{"version":3,"file":"authRepository.d.ts","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,eAAe,CAAC;AAsBvB,MAAM,WAAW,cAAc;IAC3B,0DAA0D;IAC1D,cAAc,IAAI,OAAO,CAAC;IAE1B,4EAA4E;IAC5E,gBAAgB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAE1E,gDAAgD;IAChD,kBAAkB,CACd,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAEnC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAErF;;;;;;OAMG;IACH,sBAAsB,CAClB,YAAY,EAAE,iBAAiB,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEjC;;;;;;;OAOG;IACH,wBAAwB,CACpB,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,iBAAiB,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEjC;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAElF;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEhD,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,2DAA2D;IAC3D,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAEpE,4CAA4C;IAC5C,kBAAkB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACzD;AAuBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAwUlG"}
|
|
@@ -75,24 +75,50 @@ function createAuthRepository(fetcher, config) {
|
|
|
75
75
|
function isOAuthEnabled() {
|
|
76
76
|
return Boolean(config.supabaseUrl && config.supabaseAnonKey);
|
|
77
77
|
}
|
|
78
|
+
async function getOAuthUrl(provider, options = {}) {
|
|
79
|
+
const client = await getSupabaseClient();
|
|
80
|
+
if (!client) {
|
|
81
|
+
throw new Error('Supabase is not configured. Please provide supabaseUrl and supabaseAnonKey in config.');
|
|
82
|
+
}
|
|
83
|
+
const { data, error } = await client.auth.signInWithOAuth({
|
|
84
|
+
provider,
|
|
85
|
+
options: {
|
|
86
|
+
redirectTo: options.redirectTo,
|
|
87
|
+
scopes: options.scopes,
|
|
88
|
+
queryParams: options.queryParams,
|
|
89
|
+
skipBrowserRedirect: true,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
if (error) {
|
|
93
|
+
console.error(`Get OAuth URL error (${provider}):`, error.message);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
return data.url || null;
|
|
97
|
+
}
|
|
78
98
|
async function signInWithProvider(provider, options = {}) {
|
|
79
99
|
const client = await getSupabaseClient();
|
|
80
100
|
if (!client) {
|
|
81
101
|
throw new Error('Supabase is not configured. Please provide supabaseUrl and supabaseAnonKey in config, ' +
|
|
82
102
|
'and install @supabase/supabase-js package.');
|
|
83
103
|
}
|
|
84
|
-
const { error } = await client.auth.signInWithOAuth({
|
|
104
|
+
const { data, error } = await client.auth.signInWithOAuth({
|
|
85
105
|
provider,
|
|
86
106
|
options: {
|
|
87
107
|
redirectTo: options.redirectTo,
|
|
88
108
|
scopes: options.scopes,
|
|
109
|
+
queryParams: options.queryParams,
|
|
110
|
+
skipBrowserRedirect: options.skipBrowserRedirect,
|
|
89
111
|
},
|
|
90
112
|
});
|
|
91
113
|
if (error) {
|
|
92
114
|
console.error(`OAuth sign-in error (${provider}):`, error.message);
|
|
93
115
|
throw error;
|
|
94
116
|
}
|
|
95
|
-
//
|
|
117
|
+
// If skipBrowserRedirect is true, return the URL
|
|
118
|
+
if (options.skipBrowserRedirect && data.url) {
|
|
119
|
+
return { url: data.url };
|
|
120
|
+
}
|
|
121
|
+
return { url: null };
|
|
96
122
|
}
|
|
97
123
|
async function signInWithGoogle(options = {}) {
|
|
98
124
|
return signInWithProvider('google', options);
|
|
@@ -159,10 +185,131 @@ function createAuthRepository(fetcher, config) {
|
|
|
159
185
|
}
|
|
160
186
|
return data.session;
|
|
161
187
|
}
|
|
188
|
+
// ============================================
|
|
189
|
+
// React Native OAuth Methods
|
|
190
|
+
// ============================================
|
|
191
|
+
/** OAuth provider configurations */
|
|
192
|
+
const OAUTH_CONFIGS = {
|
|
193
|
+
google: {
|
|
194
|
+
issuer: 'https://accounts.google.com',
|
|
195
|
+
defaultScopes: ['openid', 'email', 'profile'],
|
|
196
|
+
},
|
|
197
|
+
discord: {
|
|
198
|
+
serviceConfiguration: {
|
|
199
|
+
authorizationEndpoint: 'https://discord.com/api/oauth2/authorize',
|
|
200
|
+
tokenEndpoint: 'https://discord.com/api/oauth2/token',
|
|
201
|
+
},
|
|
202
|
+
issuer: '',
|
|
203
|
+
defaultScopes: ['identify', 'email'],
|
|
204
|
+
},
|
|
205
|
+
github: {
|
|
206
|
+
serviceConfiguration: {
|
|
207
|
+
authorizationEndpoint: 'https://github.com/login/oauth/authorize',
|
|
208
|
+
tokenEndpoint: 'https://github.com/login/oauth/access_token',
|
|
209
|
+
},
|
|
210
|
+
issuer: '',
|
|
211
|
+
defaultScopes: ['read:user', 'user:email'],
|
|
212
|
+
},
|
|
213
|
+
facebook: {
|
|
214
|
+
serviceConfiguration: {
|
|
215
|
+
authorizationEndpoint: 'https://www.facebook.com/v18.0/dialog/oauth',
|
|
216
|
+
tokenEndpoint: 'https://graph.facebook.com/v18.0/oauth/access_token',
|
|
217
|
+
},
|
|
218
|
+
issuer: '',
|
|
219
|
+
defaultScopes: ['email', 'public_profile'],
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
function getClientIdForProvider(provider, nativeConfig) {
|
|
223
|
+
switch (provider) {
|
|
224
|
+
case 'google':
|
|
225
|
+
return nativeConfig.googleClientId || '';
|
|
226
|
+
case 'discord':
|
|
227
|
+
return nativeConfig.discordClientId || '';
|
|
228
|
+
case 'github':
|
|
229
|
+
return nativeConfig.githubClientId || '';
|
|
230
|
+
default:
|
|
231
|
+
return '';
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function signInWithProviderNative(provider, nativeConfig, options = {}) {
|
|
235
|
+
const clientId = getClientIdForProvider(provider, nativeConfig);
|
|
236
|
+
if (!clientId) {
|
|
237
|
+
throw new Error(`Missing client ID for ${provider}. Please provide ${provider}ClientId in nativeConfig.`);
|
|
238
|
+
}
|
|
239
|
+
if (!nativeConfig.redirectUri) {
|
|
240
|
+
throw new Error('Missing redirectUri in nativeConfig.');
|
|
241
|
+
}
|
|
242
|
+
// Try to dynamically import react-native-app-auth
|
|
243
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
244
|
+
let authorize;
|
|
245
|
+
try {
|
|
246
|
+
const appAuth = await Promise.resolve().then(() => __importStar(require('react-native-app-auth')));
|
|
247
|
+
authorize = appAuth.authorize;
|
|
248
|
+
}
|
|
249
|
+
catch (_a) {
|
|
250
|
+
throw new Error('react-native-app-auth is not installed. Please install it: npm install react-native-app-auth');
|
|
251
|
+
}
|
|
252
|
+
const providerConfig = OAUTH_CONFIGS[provider];
|
|
253
|
+
const scopes = options.scopes || providerConfig.defaultScopes;
|
|
254
|
+
const authConfig = {
|
|
255
|
+
clientId,
|
|
256
|
+
redirectUrl: nativeConfig.redirectUri,
|
|
257
|
+
scopes,
|
|
258
|
+
usePKCE: options.usePKCE !== false, // Default to true
|
|
259
|
+
};
|
|
260
|
+
// Use issuer or serviceConfiguration
|
|
261
|
+
if (providerConfig.issuer) {
|
|
262
|
+
authConfig.issuer = providerConfig.issuer;
|
|
263
|
+
}
|
|
264
|
+
else if (providerConfig.serviceConfiguration) {
|
|
265
|
+
authConfig.serviceConfiguration = providerConfig.serviceConfiguration;
|
|
266
|
+
}
|
|
267
|
+
// For Google iOS, use clientId specific config
|
|
268
|
+
if (provider === 'google' && nativeConfig.googleIosClientId) {
|
|
269
|
+
// iOS uses different clientId format
|
|
270
|
+
authConfig.clientId = nativeConfig.googleIosClientId;
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
const result = await authorize(authConfig);
|
|
274
|
+
return exchangeOAuthToken(result);
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
console.error(`Native OAuth error (${provider}):`, error);
|
|
278
|
+
throw error;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
async function signInWithGoogleNative(nativeConfig, options = {}) {
|
|
282
|
+
return signInWithProviderNative('google', nativeConfig, options);
|
|
283
|
+
}
|
|
284
|
+
async function exchangeOAuthToken(oauthResult) {
|
|
285
|
+
// Use idToken for Google (OpenID Connect) or accessToken for others
|
|
286
|
+
const tokenToExchange = oauthResult.idToken || oauthResult.accessToken;
|
|
287
|
+
if (!tokenToExchange) {
|
|
288
|
+
console.error('No token available to exchange with backend');
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
// Exchange OAuth token for backend JWT
|
|
292
|
+
const { data, error } = await fetcher('/api/users/login-oauth', {
|
|
293
|
+
method: 'POST',
|
|
294
|
+
body: {
|
|
295
|
+
accessToken: tokenToExchange,
|
|
296
|
+
provider: oauthResult.idToken ? 'google' : 'oauth', // Backend needs to know provider
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
if (error) {
|
|
300
|
+
console.error('Failed to exchange OAuth token with backend:', error);
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
return data;
|
|
304
|
+
}
|
|
162
305
|
return {
|
|
163
306
|
isOAuthEnabled,
|
|
164
307
|
signInWithGoogle,
|
|
165
308
|
signInWithProvider,
|
|
309
|
+
getOAuthUrl,
|
|
310
|
+
signInWithGoogleNative,
|
|
311
|
+
signInWithProviderNative,
|
|
312
|
+
exchangeOAuthToken,
|
|
166
313
|
handleCallback,
|
|
167
314
|
signOut,
|
|
168
315
|
refreshToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authRepository.js","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"authRepository.js","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsIH,oDAwUC;AAnWD;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CAAC,MAAuB;IACvD,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,+CAA+C;QAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,uBAAuB,GAAC,CAAC;QAC/D,OAAO,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAA8B,CAAC;IACjG,CAAC;IAAC,WAAM,CAAC;QACL,OAAO,CAAC,IAAI,CACR,+EAA+E,CAClF,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,OAAoB,EAAE,MAAuB;IAC9E,oCAAoC;IACpC,IAAI,qBAAqB,GAA0C,IAAI,CAAC;IAExE,KAAK,UAAU,iBAAiB;QAC5B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACzB,qBAAqB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,SAAS,cAAc;QACnB,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,UAAU,WAAW,CACtB,QAAuB,EACvB,UAAwB,EAAE;QAE1B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACX,uFAAuF,CAC1F,CAAC;QACN,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YACtD,QAAQ;YACR,OAAO,EAAE;gBACL,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,mBAAmB,EAAE,IAAI;aAC5B;SACJ,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,UAAU,kBAAkB,CAC7B,QAAuB,EACvB,UAAwB,EAAE;QAE1B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACX,wFAAwF;gBACxF,4CAA4C,CAC/C,CAAC;QACN,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YACtD,QAAQ;YACR,OAAO,EAAE;gBACL,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;aACnD;SACJ,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,UAAwB,EAAE;QACtD,OAAO,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,UAAU,cAAc;QACzB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;QAED,gEAAgE;QAChE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvD,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,0CAA0C;QAC1C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,CACxD,2BAA2B,EAC3B;YACI,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;aACzC;SACJ,CACJ,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,UAAU,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,UAAU,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,gFAAgF;IACpF,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,YAAoB;QAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAkB,0BAA0B,EAAE;YAC/E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,YAAY,EAAE;SACzB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,kBAAkB;QAC7B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvD,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,+CAA+C;IAC/C,6BAA6B;IAC7B,+CAA+C;IAE/C,oCAAoC;IACpC,MAAM,aAAa,GAGf;QACA,MAAM,EAAE;YACJ,MAAM,EAAE,6BAA6B;YACrC,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;SAChD;QACD,OAAO,EAAE;YACL,oBAAoB,EAAE;gBAClB,qBAAqB,EAAE,0CAA0C;gBACjE,aAAa,EAAE,sCAAsC;aACxD;YACD,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;SACvC;QACD,MAAM,EAAE;YACJ,oBAAoB,EAAE;gBAClB,qBAAqB,EAAE,0CAA0C;gBACjE,aAAa,EAAE,6CAA6C;aAC/D;YACD,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;SAC7C;QACD,QAAQ,EAAE;YACN,oBAAoB,EAAE;gBAClB,qBAAqB,EAAE,6CAA6C;gBACpE,aAAa,EAAE,qDAAqD;aACvE;YACD,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC;SAC7C;KACJ,CAAC;IAEF,SAAS,sBAAsB,CAAC,QAAuB,EAAE,YAA+B;QACpF,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,QAAQ;gBACT,OAAO,YAAY,CAAC,cAAc,IAAI,EAAE,CAAC;YAC7C,KAAK,SAAS;gBACV,OAAO,YAAY,CAAC,eAAe,IAAI,EAAE,CAAC;YAC9C,KAAK,QAAQ;gBACT,OAAO,YAAY,CAAC,cAAc,IAAI,EAAE,CAAC;YAC7C;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAED,KAAK,UAAU,wBAAwB,CACnC,QAAuB,EACvB,YAA+B,EAC/B,UAA8B,EAAE;QAEhC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACX,yBAAyB,QAAQ,oBAAoB,QAAQ,2BAA2B,CAC3F,CAAC;QACN,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;QAED,kDAAkD;QAClD,8DAA8D;QAC9D,IAAI,SAAsD,CAAC;QAC3D,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,wDAAa,uBAAuB,GAAC,CAAC;YACtD,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,CAAC;QAAC,WAAM,CAAC;YACL,MAAM,IAAI,KAAK,CACX,8FAA8F,CACjG,CAAC;QACN,CAAC;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,aAAa,CAAC;QAE9D,MAAM,UAAU,GAA4B;YACxC,QAAQ;YACR,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,kBAAkB;SACzD,CAAC;QAEF,qCAAqC;QACrC,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YACxB,UAAU,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QAC9C,CAAC;aAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,CAAC;YAC7C,UAAU,CAAC,oBAAoB,GAAG,cAAc,CAAC,oBAAoB,CAAC;QAC1E,CAAC;QAED,+CAA+C;QAC/C,IAAI,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC;YAC1D,qCAAqC;YACrC,UAAU,CAAC,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC;QACzD,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,UAAU,sBAAsB,CACjC,YAA+B,EAC/B,UAA8B,EAAE;QAEhC,OAAO,wBAAwB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,UAAU,kBAAkB,CAAC,WAA8B;QAC5D,oEAAoE;QACpE,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,WAAW,CAAC;QAEvE,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,uCAAuC;QACvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAgB,wBAAwB,EAAE;YAC3E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,WAAW,EAAE,eAAe;gBAC5B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,iCAAiC;aACxF;SACJ,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,WAAW;QACX,sBAAsB;QACtB,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,OAAO;QACP,YAAY;QACZ,kBAAkB;KACrB,CAAC;AACN,CAAC"}
|
package/dist/types/auth.d.ts
CHANGED
|
@@ -10,6 +10,12 @@ export interface OAuthOptions {
|
|
|
10
10
|
redirectTo?: string;
|
|
11
11
|
/** Additional scopes to request */
|
|
12
12
|
scopes?: string;
|
|
13
|
+
/** Skip automatic browser redirect (useful for Electron/Server-side) */
|
|
14
|
+
skipBrowserRedirect?: boolean;
|
|
15
|
+
/** Additional query parameters for the OAuth URL */
|
|
16
|
+
queryParams?: {
|
|
17
|
+
[key: string]: string;
|
|
18
|
+
};
|
|
13
19
|
}
|
|
14
20
|
/** Login response from backend after token exchange */
|
|
15
21
|
export interface LoginResponse {
|
|
@@ -47,4 +53,41 @@ export interface LoginSupabaseRequest {
|
|
|
47
53
|
export interface RefreshTokenRequest {
|
|
48
54
|
refreshToken: string;
|
|
49
55
|
}
|
|
56
|
+
/** Native OAuth provider configuration for React Native */
|
|
57
|
+
export interface NativeOAuthConfig {
|
|
58
|
+
/** Google OAuth client ID (for Android/iOS) */
|
|
59
|
+
googleClientId?: string;
|
|
60
|
+
/** Google iOS client ID (optional, for iOS-specific config) */
|
|
61
|
+
googleIosClientId?: string;
|
|
62
|
+
/** Discord OAuth client ID */
|
|
63
|
+
discordClientId?: string;
|
|
64
|
+
/** GitHub OAuth client ID */
|
|
65
|
+
githubClientId?: string;
|
|
66
|
+
/** Custom redirect URI (e.g., com.yourapp://oauth) */
|
|
67
|
+
redirectUri: string;
|
|
68
|
+
/** Additional scopes to request */
|
|
69
|
+
scopes?: string[];
|
|
70
|
+
}
|
|
71
|
+
/** Native OAuth authorization result from react-native-app-auth */
|
|
72
|
+
export interface NativeOAuthResult {
|
|
73
|
+
/** Access token from OAuth provider */
|
|
74
|
+
accessToken: string;
|
|
75
|
+
/** ID token (for OpenID Connect providers like Google) */
|
|
76
|
+
idToken?: string;
|
|
77
|
+
/** Refresh token */
|
|
78
|
+
refreshToken?: string;
|
|
79
|
+
/** Token expiration date */
|
|
80
|
+
accessTokenExpirationDate?: string;
|
|
81
|
+
/** Token type (usually 'Bearer') */
|
|
82
|
+
tokenType?: string;
|
|
83
|
+
/** Scopes granted */
|
|
84
|
+
scopes?: string[];
|
|
85
|
+
}
|
|
86
|
+
/** Options for native OAuth sign-in */
|
|
87
|
+
export interface NativeOAuthOptions {
|
|
88
|
+
/** Additional scopes to request */
|
|
89
|
+
scopes?: string[];
|
|
90
|
+
/** Use PKCE (recommended, default: true) */
|
|
91
|
+
usePKCE?: boolean;
|
|
92
|
+
}
|
|
50
93
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/types/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../types/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzE,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IACzB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../types/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzE,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IACzB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oDAAoD;IACpD,WAAW,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,4BAA4B;AAC5B,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,MAAM,CAAC;CACxB;AAMD,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAC9B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAC9B,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAC/B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chanomhub/sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "ChanomHub SDK",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -53,13 +53,15 @@
|
|
|
53
53
|
"msw": "^2.12.7",
|
|
54
54
|
"next": "^16.1.1",
|
|
55
55
|
"prettier": "^3.7.4",
|
|
56
|
+
"react-native-app-auth": "^8.1.0",
|
|
56
57
|
"typescript": "^5.9.3",
|
|
57
58
|
"typescript-eslint": "^8.51.0",
|
|
58
59
|
"vitest": "^4.0.16"
|
|
59
60
|
},
|
|
60
61
|
"peerDependencies": {
|
|
61
62
|
"@supabase/supabase-js": ">=2.0.0",
|
|
62
|
-
"next": ">=13.0.0"
|
|
63
|
+
"next": ">=13.0.0",
|
|
64
|
+
"react-native-app-auth": ">=7.0.0"
|
|
63
65
|
},
|
|
64
66
|
"peerDependenciesMeta": {
|
|
65
67
|
"next": {
|
|
@@ -67,6 +69,9 @@
|
|
|
67
69
|
},
|
|
68
70
|
"@supabase/supabase-js": {
|
|
69
71
|
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"react-native-app-auth": {
|
|
74
|
+
"optional": true
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
}
|