react-native-nitro-auth 0.5.5 → 0.5.7

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.
Files changed (96) hide show
  1. package/README.md +30 -19
  2. package/android/proguard-rules.pro +7 -1
  3. package/android/src/main/AndroidManifest.xml +12 -0
  4. package/android/src/main/cpp/PlatformAuth+Android.cpp +261 -68
  5. package/android/src/main/java/com/auth/AuthAdapter.kt +250 -157
  6. package/android/src/main/java/com/auth/GoogleSignInActivity.kt +9 -5
  7. package/cpp/HybridAuth.cpp +79 -64
  8. package/cpp/HybridAuth.hpp +9 -7
  9. package/cpp/JSONSerializer.hpp +3 -0
  10. package/ios/AuthAdapter.swift +208 -66
  11. package/ios/PlatformAuth+iOS.mm +30 -4
  12. package/lib/commonjs/Auth.web.js +50 -10
  13. package/lib/commonjs/Auth.web.js.map +1 -1
  14. package/lib/commonjs/index.web.js +30 -12
  15. package/lib/commonjs/index.web.js.map +1 -1
  16. package/lib/commonjs/service.js +25 -19
  17. package/lib/commonjs/service.js.map +1 -1
  18. package/lib/commonjs/service.web.js +65 -13
  19. package/lib/commonjs/service.web.js.map +1 -1
  20. package/lib/commonjs/ui/social-button.js +19 -14
  21. package/lib/commonjs/ui/social-button.js.map +1 -1
  22. package/lib/commonjs/ui/social-button.web.js +16 -10
  23. package/lib/commonjs/ui/social-button.web.js.map +1 -1
  24. package/lib/commonjs/use-auth.js +34 -10
  25. package/lib/commonjs/use-auth.js.map +1 -1
  26. package/lib/commonjs/utils/auth-error.js +1 -1
  27. package/lib/commonjs/utils/auth-error.js.map +1 -1
  28. package/lib/commonjs/utils/logger.js +1 -0
  29. package/lib/commonjs/utils/logger.js.map +1 -1
  30. package/lib/module/Auth.web.js +50 -10
  31. package/lib/module/Auth.web.js.map +1 -1
  32. package/lib/module/global.d.js.map +1 -1
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/index.web.js +2 -1
  35. package/lib/module/index.web.js.map +1 -1
  36. package/lib/module/service.js +25 -19
  37. package/lib/module/service.js.map +1 -1
  38. package/lib/module/service.web.js +65 -13
  39. package/lib/module/service.web.js.map +1 -1
  40. package/lib/module/ui/social-button.js +19 -14
  41. package/lib/module/ui/social-button.js.map +1 -1
  42. package/lib/module/ui/social-button.web.js +16 -10
  43. package/lib/module/ui/social-button.web.js.map +1 -1
  44. package/lib/module/use-auth.js +34 -10
  45. package/lib/module/use-auth.js.map +1 -1
  46. package/lib/module/utils/auth-error.js +1 -1
  47. package/lib/module/utils/auth-error.js.map +1 -1
  48. package/lib/module/utils/logger.js +1 -0
  49. package/lib/module/utils/logger.js.map +1 -1
  50. package/lib/typescript/commonjs/Auth.nitro.d.ts +2 -2
  51. package/lib/typescript/commonjs/Auth.nitro.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/Auth.web.d.ts +5 -1
  53. package/lib/typescript/commonjs/Auth.web.d.ts.map +1 -1
  54. package/lib/typescript/commonjs/index.d.ts +1 -1
  55. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/index.web.d.ts +2 -1
  57. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/service.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/service.web.d.ts +2 -18
  60. package/lib/typescript/commonjs/service.web.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/ui/social-button.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/ui/social-button.web.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/use-auth.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/utils/auth-error.d.ts.map +1 -1
  65. package/lib/typescript/commonjs/utils/logger.d.ts.map +1 -1
  66. package/lib/typescript/module/Auth.nitro.d.ts +2 -2
  67. package/lib/typescript/module/Auth.nitro.d.ts.map +1 -1
  68. package/lib/typescript/module/Auth.web.d.ts +5 -1
  69. package/lib/typescript/module/Auth.web.d.ts.map +1 -1
  70. package/lib/typescript/module/index.d.ts +1 -1
  71. package/lib/typescript/module/index.d.ts.map +1 -1
  72. package/lib/typescript/module/index.web.d.ts +2 -1
  73. package/lib/typescript/module/index.web.d.ts.map +1 -1
  74. package/lib/typescript/module/service.d.ts.map +1 -1
  75. package/lib/typescript/module/service.web.d.ts +2 -18
  76. package/lib/typescript/module/service.web.d.ts.map +1 -1
  77. package/lib/typescript/module/ui/social-button.d.ts.map +1 -1
  78. package/lib/typescript/module/ui/social-button.web.d.ts.map +1 -1
  79. package/lib/typescript/module/use-auth.d.ts.map +1 -1
  80. package/lib/typescript/module/utils/auth-error.d.ts.map +1 -1
  81. package/lib/typescript/module/utils/logger.d.ts.map +1 -1
  82. package/nitro.json +4 -1
  83. package/nitrogen/generated/ios/NitroAuth+autolinking.rb +2 -0
  84. package/package.json +3 -4
  85. package/src/Auth.nitro.ts +3 -1
  86. package/src/Auth.web.ts +77 -11
  87. package/src/global.d.ts +0 -11
  88. package/src/index.ts +5 -1
  89. package/src/index.web.ts +6 -1
  90. package/src/service.ts +26 -19
  91. package/src/service.web.ts +84 -15
  92. package/src/ui/social-button.tsx +21 -9
  93. package/src/ui/social-button.web.tsx +17 -4
  94. package/src/use-auth.ts +65 -9
  95. package/src/utils/auth-error.ts +2 -0
  96. package/src/utils/logger.ts +1 -0
package/src/use-auth.ts CHANGED
@@ -8,6 +8,8 @@ import type {
8
8
  import { AuthService } from "./service";
9
9
  import { AuthError } from "./utils/auth-error";
10
10
 
11
+ const EMPTY_SCOPES: string[] = [];
12
+
11
13
  type AuthState = {
12
14
  user: AuthUser | undefined;
13
15
  scopes: string[];
@@ -16,11 +18,25 @@ type AuthState = {
16
18
  };
17
19
 
18
20
  const areScopesEqual = (left: string[], right: string[]): boolean => {
21
+ if (left === right) return true;
19
22
  if (left.length !== right.length) return false;
23
+
24
+ let matchesInOrder = true;
20
25
  for (let i = 0; i < left.length; i += 1) {
21
- if (left[i] !== right[i]) return false;
26
+ if (left[i] !== right[i]) {
27
+ matchesInOrder = false;
28
+ break;
29
+ }
30
+ }
31
+ if (matchesInOrder) return true;
32
+
33
+ const remaining = new Set(left);
34
+ for (const scope of right) {
35
+ if (!remaining.delete(scope)) {
36
+ return false;
37
+ }
22
38
  }
23
- return true;
39
+ return remaining.size === 0;
24
40
  };
25
41
 
26
42
  export type UseAuthReturn = AuthState & {
@@ -55,7 +71,12 @@ export function useAuth(): UseAuthReturn {
55
71
  ) {
56
72
  return prev;
57
73
  }
58
- return { user: nextUser, scopes: nextScopes, loading: nextLoading, error: nextError };
74
+ return {
75
+ user: nextUser,
76
+ scopes: nextScopes,
77
+ loading: nextLoading,
78
+ error: nextError,
79
+ };
59
80
  });
60
81
  },
61
82
  [],
@@ -78,7 +99,22 @@ export function useAuth(): UseAuthReturn {
78
99
 
79
100
  const logout = useCallback(() => {
80
101
  AuthService.logout();
81
- setState({ user: undefined, scopes: [], loading: false, error: undefined });
102
+ setState((prev) => {
103
+ if (
104
+ prev.user === undefined &&
105
+ prev.scopes.length === 0 &&
106
+ prev.loading === false &&
107
+ prev.error === undefined
108
+ ) {
109
+ return prev;
110
+ }
111
+ return {
112
+ user: undefined,
113
+ scopes: EMPTY_SCOPES,
114
+ loading: false,
115
+ error: undefined,
116
+ };
117
+ });
82
118
  }, []);
83
119
 
84
120
  const requestScopes = useCallback(
@@ -139,7 +175,7 @@ export function useAuth(): UseAuthReturn {
139
175
  }, [syncStateFromService]);
140
176
 
141
177
  useEffect(() => {
142
- const unsubscribe = AuthService.onAuthStateChanged((currentUser) => {
178
+ const unsubscribeAuth = AuthService.onAuthStateChanged((currentUser) => {
143
179
  const nextScopes = AuthService.grantedScopes;
144
180
  setState((prev) => {
145
181
  if (
@@ -149,11 +185,22 @@ export function useAuth(): UseAuthReturn {
149
185
  ) {
150
186
  return prev;
151
187
  }
152
- return { ...prev, user: currentUser, scopes: nextScopes, loading: false };
188
+ return {
189
+ ...prev,
190
+ user: currentUser,
191
+ scopes: nextScopes,
192
+ loading: false,
193
+ };
153
194
  });
154
195
  });
155
- return unsubscribe;
156
- }, []);
196
+ const unsubscribeTokens = AuthService.onTokensRefreshed?.(() => {
197
+ syncStateFromService(false, undefined);
198
+ });
199
+ return () => {
200
+ unsubscribeAuth();
201
+ unsubscribeTokens?.();
202
+ };
203
+ }, [syncStateFromService]);
157
204
 
158
205
  return useMemo(
159
206
  () => ({
@@ -167,6 +214,15 @@ export function useAuth(): UseAuthReturn {
167
214
  refreshToken,
168
215
  silentRestore,
169
216
  }),
170
- [state, login, logout, requestScopes, revokeScopes, getAccessToken, refreshToken, silentRestore],
217
+ [
218
+ state,
219
+ login,
220
+ logout,
221
+ requestScopes,
222
+ revokeScopes,
223
+ getAccessToken,
224
+ refreshToken,
225
+ silentRestore,
226
+ ],
171
227
  );
172
228
  }
@@ -6,6 +6,8 @@ const AUTH_ERROR_CODES: ReadonlySet<string> = new Set<AuthErrorCode>([
6
6
  "popup_blocked",
7
7
  "network_error",
8
8
  "configuration_error",
9
+ "not_signed_in",
10
+ "operation_in_progress",
9
11
  "unsupported_provider",
10
12
  "invalid_state",
11
13
  "invalid_nonce",
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  let enabled = false;
2
3
 
3
4
  export const logger = {