@chanomhub/sdk 1.1.3 → 1.1.5
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/dist/__tests__/auth.test.js +2 -75
- package/dist/__tests__/auth.test.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -4
- package/dist/client.js.map +1 -1
- package/dist/native.d.ts +24 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +27 -0
- package/dist/native.js.map +1 -0
- package/dist/repositories/authRepository.d.ts +4 -25
- package/dist/repositories/authRepository.d.ts.map +1 -1
- package/dist/repositories/authRepository.js +3 -120
- package/dist/repositories/authRepository.js.map +1 -1
- package/dist/repositories/authRepository.native.d.ts +50 -0
- package/dist/repositories/authRepository.native.d.ts.map +1 -0
- package/dist/repositories/authRepository.native.js +138 -0
- package/dist/repositories/authRepository.native.js.map +1 -0
- package/package.json +5 -2
|
@@ -75,81 +75,8 @@ const authRepository_1 = require("../repositories/authRepository");
|
|
|
75
75
|
(0, vitest_1.expect)(session).toBeNull();
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
|
-
//
|
|
79
|
-
//
|
|
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
|
-
});
|
|
78
|
+
// Note: React Native OAuth tests (signInWithGoogleNative, signInWithProviderNative, exchangeOAuthToken)
|
|
79
|
+
// are now tested in auth.native.test.ts since those methods moved to @chanomhub/sdk/native
|
|
153
80
|
// ============================================
|
|
154
81
|
// Electron / Server-side OAuth Tests
|
|
155
82
|
// ============================================
|
|
@@ -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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"}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,WAAW,YAAY;IACzB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAChC,OAAO,MAAM,EACb,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,UAAS,YAAiB,KAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,WAAW,YAAY;IACzB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAChC,OAAO,MAAM,EACb,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,UAAS,YAAiB,KAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAkEjC;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAC7B,UAAU,MAAM,EAChB,UAAS;IACL,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,KACP,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAqD9B;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -35,12 +35,17 @@ function createGraphQLClient(config) {
|
|
|
35
35
|
...(options.operationName && { operationName: options.operationName }),
|
|
36
36
|
}),
|
|
37
37
|
};
|
|
38
|
-
// Handle caching - use
|
|
39
|
-
// Note: Next.js and some other frameworks may extend RequestInit with 'next' property
|
|
40
|
-
// We use a type-safe approach that works everywhere
|
|
38
|
+
// Handle caching - use Next.js revalidate option for ISR support
|
|
41
39
|
const useCache = !options.noCache && !config.token;
|
|
42
40
|
const cacheSeconds = (_b = (_a = options.cacheSeconds) !== null && _a !== void 0 ? _a : config.defaultCacheSeconds) !== null && _b !== void 0 ? _b : 3600;
|
|
43
|
-
if (
|
|
41
|
+
if (useCache && cacheSeconds > 0) {
|
|
42
|
+
// Use Next.js ISR caching with revalidate option
|
|
43
|
+
fetchOptions.next = {
|
|
44
|
+
revalidate: cacheSeconds,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Disable caching entirely
|
|
44
49
|
fetchOptions.cache = 'no-store';
|
|
45
50
|
}
|
|
46
51
|
try {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqBH,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqBH,kDAuEC;AAkBD,4CA4DC;AAtKD,oDAA+D;AAW/D;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,MAAuB;IACvD,OAAO,KAAK,UAAU,YAAY,CAC9B,KAAa,EACb,YAAqC,EAAE,EACvC,UAAwB,EAAE;;QAE1B,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC7B,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC;QACxD,CAAC;QAED,2CAA2C;QAC3C,MAAM,YAAY,GAAgB;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK;gBACL,SAAS;gBACT,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;aACzE,CAAC;SACL,CAAC;QAEF,iEAAiE;QACjE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACnD,MAAM,YAAY,GAAG,MAAA,MAAA,OAAO,CAAC,YAAY,mCAAI,MAAM,CAAC,mBAAmB,mCAAI,IAAI,CAAC;QAEhF,IAAI,QAAQ,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/B,iDAAiD;YAChD,YAAgE,CAAC,IAAI,GAAG;gBACrE,UAAU,EAAE,YAAY;aAC3B,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,2BAA2B;YAC3B,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,cAAc,EAAE,YAAY,CAAC,CAAC;YAEtE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC7D,OAAO;oBACH,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;iBACjE,CAAC;YACN,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,CAAC;YAED,gDAAgD;YAChD,MAAM,eAAe,GAAG,IAAA,iCAAsB,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAM,CAAC;YAE9E,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;aAClF,CAAC;QACN,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAYD;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAuB;IACpD,OAAO,KAAK,UAAU,SAAS,CAC3B,QAAgB,EAChB,UAGI,EAAE;QAEN,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEzC,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC7B,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,YAAY,GAAgB;YAC9B,MAAM;YACN,OAAO;YACP,KAAK,EAAE,UAAU,EAAE,iDAAiD;SACvE,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACP,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;YAErE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC1D,OAAO;oBACH,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE;iBACjD,CAAC;YACN,CAAC;YAED,6CAA6C;YAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9B,kCAAkC;YAClC,MAAM,eAAe,GAAG,IAAA,iCAAsB,EAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAM,CAAC;YAEzE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACN,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|
package/dist/native.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chanomhub SDK - React Native Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This entry point provides React Native specific functionality that requires
|
|
5
|
+
* native dependencies like react-native-app-auth.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createChanomhubClient } from '@chanomhub/sdk';
|
|
10
|
+
* import { createNativeAuthRepository } from '@chanomhub/sdk/native';
|
|
11
|
+
*
|
|
12
|
+
* const sdk = createChanomhubClient();
|
|
13
|
+
* const nativeAuth = createNativeAuthRepository(sdk.rest, sdk.config);
|
|
14
|
+
*
|
|
15
|
+
* // Sign in with Google on React Native
|
|
16
|
+
* const result = await nativeAuth.signInWithGoogleNative({
|
|
17
|
+
* googleClientId: 'your-google-client-id',
|
|
18
|
+
* redirectUri: 'com.yourapp:/oauth2redirect',
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export { createNativeAuthRepository, type NativeAuthRepository, } from './repositories/authRepository.native';
|
|
23
|
+
export type { NativeOAuthConfig, NativeOAuthOptions, NativeOAuthResult, OAuthProvider, LoginResponse, } from './types/auth';
|
|
24
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACH,0BAA0B,EAC1B,KAAK,oBAAoB,GAC5B,MAAM,sCAAsC,CAAC;AAG9C,YAAY,EACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,GAChB,MAAM,cAAc,CAAC"}
|
package/dist/native.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Chanomhub SDK - React Native Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This entry point provides React Native specific functionality that requires
|
|
6
|
+
* native dependencies like react-native-app-auth.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createChanomhubClient } from '@chanomhub/sdk';
|
|
11
|
+
* import { createNativeAuthRepository } from '@chanomhub/sdk/native';
|
|
12
|
+
*
|
|
13
|
+
* const sdk = createChanomhubClient();
|
|
14
|
+
* const nativeAuth = createNativeAuthRepository(sdk.rest, sdk.config);
|
|
15
|
+
*
|
|
16
|
+
* // Sign in with Google on React Native
|
|
17
|
+
* const result = await nativeAuth.signInWithGoogleNative({
|
|
18
|
+
* googleClientId: 'your-google-client-id',
|
|
19
|
+
* redirectUri: 'com.yourapp:/oauth2redirect',
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.createNativeAuthRepository = void 0;
|
|
25
|
+
var authRepository_native_1 = require("./repositories/authRepository.native");
|
|
26
|
+
Object.defineProperty(exports, "createNativeAuthRepository", { enumerable: true, get: function () { return authRepository_native_1.createNativeAuthRepository; } });
|
|
27
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../native.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,8EAG8C;AAF1C,mIAAA,0BAA0B,OAAA"}
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
* Chanomhub SDK - Auth Repository
|
|
3
3
|
*
|
|
4
4
|
* Handles OAuth authentication via Supabase and token exchange with backend.
|
|
5
|
+
*
|
|
6
|
+
* For React Native apps, use the native auth repository from '@chanomhub/sdk/native'
|
|
7
|
+
* which includes methods like signInWithGoogleNative and signInWithProviderNative.
|
|
5
8
|
*/
|
|
6
9
|
import type { ChanomhubConfig } from '../config';
|
|
7
10
|
import type { RestFetcher } from '../client';
|
|
8
|
-
import type { OAuthProvider, OAuthOptions, LoginResponse, RefreshResponse, SupabaseSession
|
|
11
|
+
import type { OAuthProvider, OAuthOptions, LoginResponse, RefreshResponse, SupabaseSession } from '../types/auth';
|
|
9
12
|
export interface AuthRepository {
|
|
10
13
|
/** Check if Supabase OAuth is configured and available */
|
|
11
14
|
isOAuthEnabled(): boolean;
|
|
@@ -24,30 +27,6 @@ export interface AuthRepository {
|
|
|
24
27
|
* @returns OAuth URL string
|
|
25
28
|
*/
|
|
26
29
|
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>;
|
|
51
30
|
/**
|
|
52
31
|
* Handle OAuth callback after redirect back from provider.
|
|
53
32
|
* Exchanges Supabase access token for backend JWT.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authRepository.d.ts","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"authRepository.d.ts","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,EAClB,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;;;;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,CAmLlG"}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
* Chanomhub SDK - Auth Repository
|
|
4
4
|
*
|
|
5
5
|
* Handles OAuth authentication via Supabase and token exchange with backend.
|
|
6
|
+
*
|
|
7
|
+
* For React Native apps, use the native auth repository from '@chanomhub/sdk/native'
|
|
8
|
+
* which includes methods like signInWithGoogleNative and signInWithProviderNative.
|
|
6
9
|
*/
|
|
7
10
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
11
|
if (k2 === undefined) k2 = k;
|
|
@@ -185,131 +188,11 @@ function createAuthRepository(fetcher, config) {
|
|
|
185
188
|
}
|
|
186
189
|
return data.session;
|
|
187
190
|
}
|
|
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
|
-
}
|
|
305
191
|
return {
|
|
306
192
|
isOAuthEnabled,
|
|
307
193
|
signInWithGoogle,
|
|
308
194
|
signInWithProvider,
|
|
309
195
|
getOAuthUrl,
|
|
310
|
-
signInWithGoogleNative,
|
|
311
|
-
signInWithProviderNative,
|
|
312
|
-
exchangeOAuthToken,
|
|
313
196
|
handleCallback,
|
|
314
197
|
signOut,
|
|
315
198
|
refreshToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authRepository.js","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"authRepository.js","sourceRoot":"","sources":["../../repositories/authRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chanomhub SDK - React Native Auth Repository
|
|
3
|
+
*
|
|
4
|
+
* This file contains React Native specific OAuth methods that require
|
|
5
|
+
* react-native-app-auth. It is separated from the main auth repository
|
|
6
|
+
* to avoid bundling React Native dependencies in web builds.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createNativeAuthRepository } from '@chanomhub/sdk/native';
|
|
11
|
+
*
|
|
12
|
+
* const nativeAuth = createNativeAuthRepository(rest, config);
|
|
13
|
+
* const result = await nativeAuth.signInWithGoogleNative(nativeConfig);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import type { ChanomhubConfig } from '../config';
|
|
17
|
+
import type { RestFetcher } from '../client';
|
|
18
|
+
import type { OAuthProvider, LoginResponse, NativeOAuthConfig, NativeOAuthOptions, NativeOAuthResult } from '../types/auth';
|
|
19
|
+
export interface NativeAuthRepository {
|
|
20
|
+
/**
|
|
21
|
+
* Sign in with Google OAuth for React Native apps.
|
|
22
|
+
* @param nativeConfig - Native OAuth configuration with client IDs and redirect URI
|
|
23
|
+
* @param options - Additional options like scopes
|
|
24
|
+
* @returns Login response with user and tokens from backend
|
|
25
|
+
*/
|
|
26
|
+
signInWithGoogleNative(nativeConfig: NativeOAuthConfig, options?: NativeOAuthOptions): Promise<LoginResponse | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Sign in with any OAuth provider for React Native apps.
|
|
29
|
+
* @param provider - OAuth provider (google, discord, github)
|
|
30
|
+
* @param nativeConfig - Native OAuth configuration
|
|
31
|
+
* @param options - Additional options
|
|
32
|
+
* @returns Login response with user and tokens from backend
|
|
33
|
+
*/
|
|
34
|
+
signInWithProviderNative(provider: OAuthProvider, nativeConfig: NativeOAuthConfig, options?: NativeOAuthOptions): Promise<LoginResponse | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Exchange OAuth token from react-native-app-auth with backend.
|
|
37
|
+
* Use this if you handle the OAuth flow yourself.
|
|
38
|
+
* @param oauthResult - Result from react-native-app-auth authorize()
|
|
39
|
+
* @returns Login response with user and backend tokens
|
|
40
|
+
*/
|
|
41
|
+
exchangeOAuthToken(oauthResult: NativeOAuthResult): Promise<LoginResponse | null>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a React Native auth repository for native OAuth operations
|
|
45
|
+
*
|
|
46
|
+
* @param fetcher - REST API fetcher
|
|
47
|
+
* @param _config - SDK configuration (reserved for future use)
|
|
48
|
+
*/
|
|
49
|
+
export declare function createNativeAuthRepository(fetcher: RestFetcher, _config: ChanomhubConfig): NativeAuthRepository;
|
|
50
|
+
//# sourceMappingURL=authRepository.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authRepository.native.d.ts","sourceRoot":"","sources":["../../repositories/authRepository.native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACR,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,eAAe,CAAC;AAKvB,MAAM,WAAW,oBAAoB;IACjC;;;;;OAKG;IACH,sBAAsB,CAClB,YAAY,EAAE,iBAAiB,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEjC;;;;;;OAMG;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;CACrF;AAsDD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,eAAe,GACzB,oBAAoB,CAwFtB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Chanomhub SDK - React Native Auth Repository
|
|
4
|
+
*
|
|
5
|
+
* This file contains React Native specific OAuth methods that require
|
|
6
|
+
* react-native-app-auth. It is separated from the main auth repository
|
|
7
|
+
* to avoid bundling React Native dependencies in web builds.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createNativeAuthRepository } from '@chanomhub/sdk/native';
|
|
12
|
+
*
|
|
13
|
+
* const nativeAuth = createNativeAuthRepository(rest, config);
|
|
14
|
+
* const result = await nativeAuth.signInWithGoogleNative(nativeConfig);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.createNativeAuthRepository = createNativeAuthRepository;
|
|
19
|
+
// Import directly - this file is only bundled for React Native
|
|
20
|
+
const react_native_app_auth_1 = require("react-native-app-auth");
|
|
21
|
+
/** OAuth provider configurations */
|
|
22
|
+
const OAUTH_CONFIGS = {
|
|
23
|
+
google: {
|
|
24
|
+
issuer: 'https://accounts.google.com',
|
|
25
|
+
defaultScopes: ['openid', 'email', 'profile'],
|
|
26
|
+
},
|
|
27
|
+
discord: {
|
|
28
|
+
serviceConfiguration: {
|
|
29
|
+
authorizationEndpoint: 'https://discord.com/api/oauth2/authorize',
|
|
30
|
+
tokenEndpoint: 'https://discord.com/api/oauth2/token',
|
|
31
|
+
},
|
|
32
|
+
issuer: '',
|
|
33
|
+
defaultScopes: ['identify', 'email'],
|
|
34
|
+
},
|
|
35
|
+
github: {
|
|
36
|
+
serviceConfiguration: {
|
|
37
|
+
authorizationEndpoint: 'https://github.com/login/oauth/authorize',
|
|
38
|
+
tokenEndpoint: 'https://github.com/login/oauth/access_token',
|
|
39
|
+
},
|
|
40
|
+
issuer: '',
|
|
41
|
+
defaultScopes: ['read:user', 'user:email'],
|
|
42
|
+
},
|
|
43
|
+
facebook: {
|
|
44
|
+
serviceConfiguration: {
|
|
45
|
+
authorizationEndpoint: 'https://www.facebook.com/v18.0/dialog/oauth',
|
|
46
|
+
tokenEndpoint: 'https://graph.facebook.com/v18.0/oauth/access_token',
|
|
47
|
+
},
|
|
48
|
+
issuer: '',
|
|
49
|
+
defaultScopes: ['email', 'public_profile'],
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
function getClientIdForProvider(provider, nativeConfig) {
|
|
53
|
+
switch (provider) {
|
|
54
|
+
case 'google':
|
|
55
|
+
return nativeConfig.googleClientId || '';
|
|
56
|
+
case 'discord':
|
|
57
|
+
return nativeConfig.discordClientId || '';
|
|
58
|
+
case 'github':
|
|
59
|
+
return nativeConfig.githubClientId || '';
|
|
60
|
+
default:
|
|
61
|
+
return '';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates a React Native auth repository for native OAuth operations
|
|
66
|
+
*
|
|
67
|
+
* @param fetcher - REST API fetcher
|
|
68
|
+
* @param _config - SDK configuration (reserved for future use)
|
|
69
|
+
*/
|
|
70
|
+
function createNativeAuthRepository(fetcher, _config) {
|
|
71
|
+
async function exchangeOAuthToken(oauthResult) {
|
|
72
|
+
// Use idToken for Google (OpenID Connect) or accessToken for others
|
|
73
|
+
const tokenToExchange = oauthResult.idToken || oauthResult.accessToken;
|
|
74
|
+
if (!tokenToExchange) {
|
|
75
|
+
console.error('No token available to exchange with backend');
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
// Exchange OAuth token for backend JWT
|
|
79
|
+
const { data, error } = await fetcher('/api/users/login-oauth', {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
body: {
|
|
82
|
+
accessToken: tokenToExchange,
|
|
83
|
+
provider: oauthResult.idToken ? 'google' : 'oauth',
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
if (error) {
|
|
87
|
+
console.error('Failed to exchange OAuth token with backend:', error);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return data;
|
|
91
|
+
}
|
|
92
|
+
async function signInWithProviderNative(provider, nativeConfig, options = {}) {
|
|
93
|
+
const clientId = getClientIdForProvider(provider, nativeConfig);
|
|
94
|
+
if (!clientId) {
|
|
95
|
+
throw new Error(`Missing client ID for ${provider}. Please provide ${provider}ClientId in nativeConfig.`);
|
|
96
|
+
}
|
|
97
|
+
if (!nativeConfig.redirectUri) {
|
|
98
|
+
throw new Error('Missing redirectUri in nativeConfig.');
|
|
99
|
+
}
|
|
100
|
+
const providerConfig = OAUTH_CONFIGS[provider];
|
|
101
|
+
const scopes = options.scopes || providerConfig.defaultScopes;
|
|
102
|
+
const authConfig = {
|
|
103
|
+
clientId,
|
|
104
|
+
redirectUrl: nativeConfig.redirectUri,
|
|
105
|
+
scopes,
|
|
106
|
+
usePKCE: options.usePKCE !== false, // Default to true
|
|
107
|
+
};
|
|
108
|
+
// Use issuer or serviceConfiguration
|
|
109
|
+
if (providerConfig.issuer) {
|
|
110
|
+
authConfig.issuer = providerConfig.issuer;
|
|
111
|
+
}
|
|
112
|
+
else if (providerConfig.serviceConfiguration) {
|
|
113
|
+
authConfig.serviceConfiguration = providerConfig.serviceConfiguration;
|
|
114
|
+
}
|
|
115
|
+
// For Google iOS, use clientId specific config
|
|
116
|
+
if (provider === 'google' && nativeConfig.googleIosClientId) {
|
|
117
|
+
authConfig.clientId = nativeConfig.googleIosClientId;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
+
const result = await (0, react_native_app_auth_1.authorize)(authConfig);
|
|
122
|
+
return exchangeOAuthToken(result);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(`Native OAuth error (${provider}):`, error);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function signInWithGoogleNative(nativeConfig, options = {}) {
|
|
130
|
+
return signInWithProviderNative('google', nativeConfig, options);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
signInWithGoogleNative,
|
|
134
|
+
signInWithProviderNative,
|
|
135
|
+
exchangeOAuthToken,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=authRepository.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authRepository.native.js","sourceRoot":"","sources":["../../repositories/authRepository.native.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chanomhub/sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "ChanomHub SDK",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
"./next": {
|
|
24
24
|
"types": "./dist/next.d.ts",
|
|
25
25
|
"default": "./dist/next.js"
|
|
26
|
+
},
|
|
27
|
+
"./native": {
|
|
28
|
+
"types": "./dist/native.d.ts",
|
|
29
|
+
"default": "./dist/native.js"
|
|
26
30
|
}
|
|
27
31
|
},
|
|
28
32
|
"scripts": {
|
|
@@ -53,7 +57,6 @@
|
|
|
53
57
|
"msw": "^2.12.7",
|
|
54
58
|
"next": "^16.1.1",
|
|
55
59
|
"prettier": "^3.7.4",
|
|
56
|
-
"react-native-app-auth": "^8.1.0",
|
|
57
60
|
"typescript": "^5.9.3",
|
|
58
61
|
"typescript-eslint": "^8.51.0",
|
|
59
62
|
"vitest": "^4.0.16"
|