react-native-nitro-auth 0.1.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.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +254 -0
  3. package/android/CMakeLists.txt +37 -0
  4. package/android/build.gradle +99 -0
  5. package/android/gradle.properties +4 -0
  6. package/android/src/main/AndroidManifest.xml +12 -0
  7. package/android/src/main/cpp/JniOnLoad.cpp +7 -0
  8. package/android/src/main/cpp/PlatformAuth+Android.cpp +293 -0
  9. package/android/src/main/java/com/auth/AuthAdapter.kt +286 -0
  10. package/android/src/main/java/com/auth/GoogleSignInActivity.kt +73 -0
  11. package/android/src/main/java/com/auth/NitroAuthModule.kt +19 -0
  12. package/android/src/main/java/com/auth/NitroAuthPackage.kt +16 -0
  13. package/app.plugin.js +64 -0
  14. package/cpp/AuthCache.cpp +105 -0
  15. package/cpp/AuthCache.hpp +20 -0
  16. package/cpp/HybridAuth.cpp +213 -0
  17. package/cpp/HybridAuth.hpp +47 -0
  18. package/cpp/JSONSerializer.hpp +57 -0
  19. package/cpp/PlatformAuth.hpp +25 -0
  20. package/ios/AuthAdapter.swift +200 -0
  21. package/ios/PlatformAuth+iOS.mm +119 -0
  22. package/lib/commonjs/Auth.nitro.js +6 -0
  23. package/lib/commonjs/Auth.nitro.js.map +1 -0
  24. package/lib/commonjs/Auth.web.js +256 -0
  25. package/lib/commonjs/Auth.web.js.map +1 -0
  26. package/lib/commonjs/global.d.js +6 -0
  27. package/lib/commonjs/global.d.js.map +1 -0
  28. package/lib/commonjs/index.js +52 -0
  29. package/lib/commonjs/index.js.map +1 -0
  30. package/lib/commonjs/index.web.js +52 -0
  31. package/lib/commonjs/index.web.js.map +1 -0
  32. package/lib/commonjs/service.js +9 -0
  33. package/lib/commonjs/service.js.map +1 -0
  34. package/lib/commonjs/service.web.js +13 -0
  35. package/lib/commonjs/service.web.js.map +1 -0
  36. package/lib/commonjs/ui/social-button.js +103 -0
  37. package/lib/commonjs/ui/social-button.js.map +1 -0
  38. package/lib/commonjs/ui/social-button.web.js +102 -0
  39. package/lib/commonjs/ui/social-button.web.js.map +1 -0
  40. package/lib/commonjs/use-auth.js +144 -0
  41. package/lib/commonjs/use-auth.js.map +1 -0
  42. package/lib/module/Auth.nitro.js +4 -0
  43. package/lib/module/Auth.nitro.js.map +1 -0
  44. package/lib/module/Auth.web.js +252 -0
  45. package/lib/module/Auth.web.js.map +1 -0
  46. package/lib/module/global.d.js +4 -0
  47. package/lib/module/global.d.js.map +1 -0
  48. package/lib/module/index.js +7 -0
  49. package/lib/module/index.js.map +1 -0
  50. package/lib/module/index.web.js +7 -0
  51. package/lib/module/index.web.js.map +1 -0
  52. package/lib/module/service.js +5 -0
  53. package/lib/module/service.js.map +1 -0
  54. package/lib/module/service.web.js +4 -0
  55. package/lib/module/service.web.js.map +1 -0
  56. package/lib/module/ui/social-button.js +97 -0
  57. package/lib/module/ui/social-button.js.map +1 -0
  58. package/lib/module/ui/social-button.web.js +96 -0
  59. package/lib/module/ui/social-button.web.js.map +1 -0
  60. package/lib/module/use-auth.js +140 -0
  61. package/lib/module/use-auth.js.map +1 -0
  62. package/lib/typescript/Auth.nitro.d.ts +38 -0
  63. package/lib/typescript/Auth.nitro.d.ts.map +1 -0
  64. package/lib/typescript/Auth.web.d.ts +32 -0
  65. package/lib/typescript/Auth.web.d.ts.map +1 -0
  66. package/lib/typescript/index.d.ts +5 -0
  67. package/lib/typescript/index.d.ts.map +1 -0
  68. package/lib/typescript/index.web.d.ts +5 -0
  69. package/lib/typescript/index.web.d.ts.map +1 -0
  70. package/lib/typescript/service.d.ts +3 -0
  71. package/lib/typescript/service.d.ts.map +1 -0
  72. package/lib/typescript/service.web.d.ts +2 -0
  73. package/lib/typescript/service.web.d.ts.map +1 -0
  74. package/lib/typescript/ui/social-button.d.ts +17 -0
  75. package/lib/typescript/ui/social-button.d.ts.map +1 -0
  76. package/lib/typescript/ui/social-button.web.d.ts +17 -0
  77. package/lib/typescript/ui/social-button.web.d.ts.map +1 -0
  78. package/lib/typescript/use-auth.d.ts +15 -0
  79. package/lib/typescript/use-auth.d.ts.map +1 -0
  80. package/nitro.json +15 -0
  81. package/nitrogen/generated/.gitattributes +1 -0
  82. package/nitrogen/generated/android/NitroAuth+autolinking.cmake +81 -0
  83. package/nitrogen/generated/android/NitroAuth+autolinking.gradle +27 -0
  84. package/nitrogen/generated/android/NitroAuthOnLoad.cpp +44 -0
  85. package/nitrogen/generated/android/NitroAuthOnLoad.hpp +25 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/auth/NitroAuthOnLoad.kt +35 -0
  87. package/nitrogen/generated/ios/NitroAuth+autolinking.rb +60 -0
  88. package/nitrogen/generated/ios/NitroAuth-Swift-Cxx-Bridge.cpp +17 -0
  89. package/nitrogen/generated/ios/NitroAuth-Swift-Cxx-Bridge.hpp +27 -0
  90. package/nitrogen/generated/ios/NitroAuth-Swift-Cxx-Umbrella.hpp +38 -0
  91. package/nitrogen/generated/ios/NitroAuthAutolinking.mm +35 -0
  92. package/nitrogen/generated/ios/NitroAuthAutolinking.swift +12 -0
  93. package/nitrogen/generated/shared/c++/AuthProvider.hpp +76 -0
  94. package/nitrogen/generated/shared/c++/AuthTokens.hpp +84 -0
  95. package/nitrogen/generated/shared/c++/AuthUser.hpp +107 -0
  96. package/nitrogen/generated/shared/c++/HybridAuthSpec.cpp +30 -0
  97. package/nitrogen/generated/shared/c++/HybridAuthSpec.hpp +85 -0
  98. package/nitrogen/generated/shared/c++/LoginOptions.hpp +81 -0
  99. package/package.json +113 -0
  100. package/react-native-nitro-auth.podspec +40 -0
  101. package/src/Auth.nitro.ts +50 -0
  102. package/src/Auth.web.ts +310 -0
  103. package/src/global.d.ts +38 -0
  104. package/src/index.ts +4 -0
  105. package/src/index.web.ts +4 -0
  106. package/src/service.ts +4 -0
  107. package/src/service.web.ts +1 -0
  108. package/src/ui/social-button.tsx +129 -0
  109. package/src/ui/social-button.web.tsx +128 -0
  110. package/src/use-auth.ts +157 -0
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+
3
+ const CACHE_KEY = "nitro_auth_user";
4
+ const SCOPES_KEY = "nitro_auth_scopes";
5
+ const DEFAULT_SCOPES = ["openid", "email", "profile"];
6
+ const getConfig = () => {
7
+ try {
8
+ const Constants = require("expo-constants").default;
9
+ return Constants.expoConfig?.extra || {};
10
+ } catch {
11
+ return {};
12
+ }
13
+ };
14
+ class AuthWeb {
15
+ _grantedScopes = [];
16
+ _listeners = [];
17
+ constructor() {
18
+ const cached = localStorage.getItem(CACHE_KEY);
19
+ if (cached) {
20
+ try {
21
+ this._currentUser = JSON.parse(cached);
22
+ } catch {
23
+ localStorage.removeItem(CACHE_KEY);
24
+ }
25
+ }
26
+ const scopes = localStorage.getItem(SCOPES_KEY);
27
+ if (scopes) {
28
+ try {
29
+ this._grantedScopes = JSON.parse(scopes);
30
+ } catch {
31
+ localStorage.removeItem(SCOPES_KEY);
32
+ }
33
+ }
34
+ }
35
+ get currentUser() {
36
+ return this._currentUser;
37
+ }
38
+ get grantedScopes() {
39
+ return this._grantedScopes;
40
+ }
41
+ get hasPlayServices() {
42
+ return true;
43
+ }
44
+ onAuthStateChanged(callback) {
45
+ this._listeners.push(callback);
46
+ callback(this._currentUser);
47
+ return () => {
48
+ this._listeners = this._listeners.filter(l => l !== callback);
49
+ };
50
+ }
51
+ notify() {
52
+ this._listeners.forEach(l => l(this._currentUser));
53
+ }
54
+ async login(provider, options) {
55
+ const scopes = options?.scopes ?? DEFAULT_SCOPES;
56
+ const loginHint = options?.loginHint;
57
+ try {
58
+ if (provider === "google") {
59
+ return await this.loginGoogle(scopes, loginHint);
60
+ }
61
+ return await this.loginApple();
62
+ } catch (e) {
63
+ throw this.mapError(e);
64
+ }
65
+ }
66
+ async requestScopes(scopes) {
67
+ if (!this._currentUser) {
68
+ throw new Error("No user logged in");
69
+ }
70
+ if (this._currentUser.provider !== "google") {
71
+ throw new Error("Scope management only supported for Google");
72
+ }
73
+ const newScopes = [...new Set([...this._grantedScopes, ...scopes])];
74
+ return this.loginGoogle(newScopes).catch(e => {
75
+ throw this.mapError(e);
76
+ });
77
+ }
78
+ async revokeScopes(scopes) {
79
+ this._grantedScopes = this._grantedScopes.filter(s => !scopes.includes(s));
80
+ localStorage.setItem(SCOPES_KEY, JSON.stringify(this._grantedScopes));
81
+ if (this._currentUser) {
82
+ this._currentUser.scopes = this._grantedScopes;
83
+ this.updateUser(this._currentUser);
84
+ }
85
+ }
86
+ async getAccessToken() {
87
+ if (this._currentUser?.expirationTime) {
88
+ const now = Date.now();
89
+ if (now + 300000 > this._currentUser.expirationTime) {
90
+ await this.refreshToken();
91
+ }
92
+ }
93
+ return this._currentUser?.accessToken;
94
+ }
95
+ async refreshToken() {
96
+ if (!this._currentUser) {
97
+ throw new Error("No user logged in");
98
+ }
99
+ if (this._currentUser.provider !== "google") {
100
+ throw new Error("Token refresh only supported for Google");
101
+ }
102
+ await this.loginGoogle(this._grantedScopes.length > 0 ? this._grantedScopes : DEFAULT_SCOPES);
103
+ return {
104
+ accessToken: this._currentUser.accessToken,
105
+ idToken: this._currentUser.idToken
106
+ };
107
+ }
108
+ mapError(error) {
109
+ const msg = error?.message?.toLowerCase() ?? "";
110
+ if (msg.includes("cancel") || msg.includes("popup_closed")) {
111
+ return new Error("cancelled");
112
+ }
113
+ if (msg.includes("network")) {
114
+ return new Error("network_error");
115
+ }
116
+ if (msg.includes("client id") || msg.includes("config")) {
117
+ return new Error("configuration_error");
118
+ }
119
+ return error;
120
+ }
121
+ async loginGoogle(scopes, loginHint) {
122
+ const config = getConfig();
123
+ const clientId = config.googleWebClientId;
124
+ if (!clientId) {
125
+ throw new Error("Google Web Client ID not configured. Add 'GOOGLE_WEB_CLIENT_ID' to your .env file.");
126
+ }
127
+ return new Promise((resolve, reject) => {
128
+ const redirectUri = window.location.origin;
129
+ const authUrl = new URL("https://accounts.google.com/o/oauth2/v2/auth");
130
+ authUrl.searchParams.set("client_id", clientId);
131
+ authUrl.searchParams.set("redirect_uri", redirectUri);
132
+ authUrl.searchParams.set("response_type", "id_token token");
133
+ authUrl.searchParams.set("scope", scopes.join(" "));
134
+ authUrl.searchParams.set("nonce", Math.random().toString(36).slice(2));
135
+ if (loginHint) {
136
+ authUrl.searchParams.set("login_hint", loginHint);
137
+ }
138
+ const width = 500;
139
+ const height = 600;
140
+ const left = window.screenX + (window.outerWidth - width) / 2;
141
+ const top = window.screenY + (window.outerHeight - height) / 2;
142
+ const popup = window.open(authUrl.toString(), "google-auth", `width=${width},height=${height},left=${left},top=${top}`);
143
+ if (!popup) {
144
+ reject(new Error("Popup blocked. Please allow popups for this site."));
145
+ return;
146
+ }
147
+ const checkInterval = setInterval(() => {
148
+ try {
149
+ if (popup.closed) {
150
+ clearInterval(checkInterval);
151
+ reject(new Error("cancelled"));
152
+ return;
153
+ }
154
+ const url = popup.location.href;
155
+ if (url.startsWith(redirectUri)) {
156
+ clearInterval(checkInterval);
157
+ popup.close();
158
+ const hash = new URL(url).hash.slice(1);
159
+ const params = new URLSearchParams(hash);
160
+ const idToken = params.get("id_token");
161
+ const accessToken = params.get("access_token");
162
+ const expiresIn = params.get("expires_in");
163
+ if (idToken) {
164
+ this._grantedScopes = scopes;
165
+ localStorage.setItem(SCOPES_KEY, JSON.stringify(scopes));
166
+ const user = {
167
+ provider: "google",
168
+ idToken,
169
+ accessToken: accessToken ?? undefined,
170
+ scopes,
171
+ expirationTime: expiresIn ? Date.now() + parseInt(expiresIn) * 1000 : undefined,
172
+ ...this.decodeGoogleJwt(idToken)
173
+ };
174
+ this.updateUser(user);
175
+ resolve();
176
+ } else {
177
+ reject(new Error("No id_token in response"));
178
+ }
179
+ }
180
+ } catch {}
181
+ }, 100);
182
+ });
183
+ }
184
+ decodeGoogleJwt(token) {
185
+ try {
186
+ const payload = token.split(".")[1];
187
+ const decoded = JSON.parse(atob(payload));
188
+ return {
189
+ email: decoded.email,
190
+ name: decoded.name,
191
+ photo: decoded.picture
192
+ };
193
+ } catch {
194
+ return {};
195
+ }
196
+ }
197
+ async loginApple() {
198
+ const config = getConfig();
199
+ const clientId = config.appleWebClientId;
200
+ if (!clientId) {
201
+ throw new Error("Apple Web Client ID not configured. Add 'APPLE_WEB_CLIENT_ID' to your .env file.");
202
+ }
203
+ return new Promise((resolve, reject) => {
204
+ const script = document.createElement("script");
205
+ script.src = "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js";
206
+ script.async = true;
207
+ script.onload = () => {
208
+ if (!window.AppleID) {
209
+ reject(new Error("Apple SDK not loaded"));
210
+ return;
211
+ }
212
+ window.AppleID.auth.init({
213
+ clientId,
214
+ scope: "name email",
215
+ redirectURI: window.location.origin,
216
+ usePopup: true
217
+ });
218
+ window.AppleID.auth.signIn().then(response => {
219
+ const user = {
220
+ provider: "apple",
221
+ idToken: response.authorization.id_token,
222
+ email: response.user?.email,
223
+ name: response.user?.name ? `${response.user.name.firstName} ${response.user.name.lastName}`.trim() : undefined
224
+ };
225
+ this.updateUser(user);
226
+ resolve();
227
+ }).catch(e => reject(this.mapError(e)));
228
+ };
229
+ script.onerror = () => reject(new Error("Failed to load Apple SDK"));
230
+ document.head.appendChild(script);
231
+ });
232
+ }
233
+ logout() {
234
+ this._currentUser = undefined;
235
+ this._grantedScopes = [];
236
+ localStorage.removeItem(CACHE_KEY);
237
+ localStorage.removeItem(SCOPES_KEY);
238
+ this.notify();
239
+ }
240
+ updateUser(user) {
241
+ this._currentUser = user;
242
+ localStorage.setItem(CACHE_KEY, JSON.stringify(user));
243
+ this.notify();
244
+ }
245
+ name = "Auth";
246
+ dispose() {}
247
+ equals(other) {
248
+ return other === this;
249
+ }
250
+ }
251
+ export const AuthModule = new AuthWeb();
252
+ //# sourceMappingURL=Auth.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CACHE_KEY","SCOPES_KEY","DEFAULT_SCOPES","getConfig","Constants","require","default","expoConfig","extra","AuthWeb","_grantedScopes","_listeners","constructor","cached","localStorage","getItem","_currentUser","JSON","parse","removeItem","scopes","currentUser","grantedScopes","hasPlayServices","onAuthStateChanged","callback","push","filter","l","notify","forEach","login","provider","options","loginHint","loginGoogle","loginApple","e","mapError","requestScopes","Error","newScopes","Set","catch","revokeScopes","s","includes","setItem","stringify","updateUser","getAccessToken","expirationTime","now","Date","refreshToken","accessToken","length","idToken","error","msg","message","toLowerCase","config","clientId","googleWebClientId","Promise","resolve","reject","redirectUri","window","location","origin","authUrl","URL","searchParams","set","join","Math","random","toString","slice","width","height","left","screenX","outerWidth","top","screenY","outerHeight","popup","open","checkInterval","setInterval","closed","clearInterval","url","href","startsWith","close","hash","params","URLSearchParams","get","expiresIn","user","undefined","parseInt","decodeGoogleJwt","token","payload","split","decoded","atob","email","name","photo","picture","appleWebClientId","script","document","createElement","src","async","onload","AppleID","auth","init","scope","redirectURI","usePopup","signIn","then","response","authorization","id_token","firstName","lastName","trim","onerror","head","appendChild","logout","dispose","equals","other","AuthModule"],"sourceRoot":"../../src","sources":["Auth.web.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=global.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["global.d.ts"],"mappings":";;AAoCA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export * from "./Auth.nitro.js";
4
+ export * from "./ui/social-button";
5
+ export * from "./use-auth.js";
6
+ export { AuthService } from "./service";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AuthService"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,iBAAc;AAC5B,cAAc,oBAAoB;AAClC,cAAc,eAAY;AAC1B,SAASA,WAAW,QAAQ,WAAW","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export * from "./Auth.nitro.js";
4
+ export * from "./ui/social-button.web.js";
5
+ export * from "./use-auth.js";
6
+ export { AuthService } from "./service.web.js";
7
+ //# sourceMappingURL=index.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AuthService"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA,cAAc,iBAAc;AAC5B,cAAc,2BAAwB;AACtC,cAAc,eAAY;AAC1B,SAASA,WAAW,QAAQ,kBAAe","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { NitroModules } from "react-native-nitro-modules";
4
+ export const AuthService = NitroModules.createHybridObject("Auth");
5
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NitroModules","AuthService","createHybridObject"],"sourceRoot":"../../src","sources":["service.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAGzD,OAAO,MAAMC,WAAW,GAAGD,YAAY,CAACE,kBAAkB,CAAO,MAAM,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { AuthModule as AuthService } from "./Auth.web.js";
4
+ //# sourceMappingURL=service.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AuthModule","AuthService"],"sourceRoot":"../../src","sources":["service.web.ts"],"mappings":";;AAAA,SAASA,UAAU,IAAIC,WAAW,QAAQ,eAAY","ignoreList":[]}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ import React, { useState } from "react";
4
+ import { Pressable, Text, StyleSheet, View, ActivityIndicator } from "react-native";
5
+ import { NitroModules } from "react-native-nitro-modules";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ async function performLogin(provider) {
8
+ const auth = NitroModules.createHybridObject("Auth");
9
+ await auth.login(provider);
10
+ return auth.currentUser ?? null;
11
+ }
12
+ export const SocialButton = ({
13
+ provider,
14
+ variant = "primary",
15
+ borderRadius = 8,
16
+ style,
17
+ textStyle,
18
+ disabled,
19
+ onSuccess,
20
+ onError,
21
+ onPress
22
+ }) => {
23
+ const [loading, setLoading] = useState(false);
24
+ const handleLogin = () => {
25
+ if (loading || disabled) return;
26
+ if (onPress) {
27
+ onPress();
28
+ return;
29
+ }
30
+ setLoading(true);
31
+ performLogin(provider).then(user => {
32
+ setLoading(false);
33
+ if (user) onSuccess?.(user);
34
+ }).catch(e => {
35
+ setLoading(false);
36
+ onError?.(e);
37
+ });
38
+ };
39
+ const isGoogle = provider === "google";
40
+ const isDisabled = loading || disabled;
41
+ const getBackgroundColor = () => {
42
+ if (isDisabled) return "#CCCCCC";
43
+ if (variant === "black") return "#000000";
44
+ if (variant === "white") return "#FFFFFF";
45
+ if (variant === "outline") return "transparent";
46
+ return isGoogle ? "#4285F4" : "#000000";
47
+ };
48
+ const getTextColor = () => {
49
+ if (variant === "white" || variant === "outline") return "#000000";
50
+ return "#FFFFFF";
51
+ };
52
+ const getBorderColor = () => {
53
+ if (variant === "outline") return "#DDDDDD";
54
+ return "transparent";
55
+ };
56
+ return /*#__PURE__*/_jsx(Pressable, {
57
+ style: [styles.button, {
58
+ backgroundColor: getBackgroundColor(),
59
+ borderRadius,
60
+ borderColor: getBorderColor(),
61
+ borderWidth: variant === "outline" ? 1 : 0
62
+ }, style],
63
+ onPress: handleLogin,
64
+ disabled: isDisabled,
65
+ children: /*#__PURE__*/_jsx(View, {
66
+ style: styles.content,
67
+ children: loading ? /*#__PURE__*/_jsx(ActivityIndicator, {
68
+ size: "small",
69
+ color: getTextColor()
70
+ }) : /*#__PURE__*/_jsxs(Text, {
71
+ style: [styles.text, {
72
+ color: getTextColor()
73
+ }, textStyle],
74
+ children: ["Sign in with ", provider.charAt(0).toUpperCase() + provider.slice(1)]
75
+ })
76
+ })
77
+ });
78
+ };
79
+ const styles = StyleSheet.create({
80
+ button: {
81
+ paddingVertical: 12,
82
+ paddingHorizontal: 16,
83
+ minHeight: 48,
84
+ justifyContent: "center",
85
+ alignItems: "center",
86
+ width: "100%"
87
+ },
88
+ content: {
89
+ flexDirection: "row",
90
+ alignItems: "center"
91
+ },
92
+ text: {
93
+ fontSize: 16,
94
+ fontWeight: "600"
95
+ }
96
+ });
97
+ //# sourceMappingURL=social-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","Pressable","Text","StyleSheet","View","ActivityIndicator","NitroModules","jsx","_jsx","jsxs","_jsxs","performLogin","provider","auth","createHybridObject","login","currentUser","SocialButton","variant","borderRadius","style","textStyle","disabled","onSuccess","onError","onPress","loading","setLoading","handleLogin","then","user","catch","e","isGoogle","isDisabled","getBackgroundColor","getTextColor","getBorderColor","styles","button","backgroundColor","borderColor","borderWidth","children","content","size","color","text","charAt","toUpperCase","slice","create","paddingVertical","paddingHorizontal","minHeight","justifyContent","alignItems","width","flexDirection","fontSize","fontWeight"],"sourceRoot":"../../../src","sources":["ui/social-button.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SACEC,SAAS,EACTC,IAAI,EACJC,UAAU,EACVC,IAAI,EAGJC,iBAAiB,QACZ,cAAc;AACrB,SAASC,YAAY,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAe1D,eAAeC,YAAYA,CAACC,QAAsB,EAA4B;EAC5E,MAAMC,IAAI,GAAGP,YAAY,CAACQ,kBAAkB,CAAO,MAAM,CAAC;EAC1D,MAAMD,IAAI,CAACE,KAAK,CAACH,QAAQ,CAAC;EAC1B,OAAOC,IAAI,CAACG,WAAW,IAAI,IAAI;AACjC;AAEA,OAAO,MAAMC,YAAyC,GAAGA,CAAC;EACxDL,QAAQ;EACRM,OAAO,GAAG,SAAS;EACnBC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC,SAAS;EACTC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG3B,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAM4B,WAAW,GAAGA,CAAA,KAAM;IACxB,IAAIF,OAAO,IAAIJ,QAAQ,EAAE;IACzB,IAAIG,OAAO,EAAE;MACXA,OAAO,CAAC,CAAC;MACT;IACF;IACAE,UAAU,CAAC,IAAI,CAAC;IAChBhB,YAAY,CAACC,QAAQ,CAAC,CACnBiB,IAAI,CAAEC,IAAI,IAAK;MACdH,UAAU,CAAC,KAAK,CAAC;MACjB,IAAIG,IAAI,EAAEP,SAAS,GAAGO,IAAI,CAAC;IAC7B,CAAC,CAAC,CACDC,KAAK,CAAEC,CAAC,IAAK;MACZL,UAAU,CAAC,KAAK,CAAC;MACjBH,OAAO,GAAGQ,CAAC,CAAC;IACd,CAAC,CAAC;EACN,CAAC;EAED,MAAMC,QAAQ,GAAGrB,QAAQ,KAAK,QAAQ;EACtC,MAAMsB,UAAU,GAAGR,OAAO,IAAIJ,QAAQ;EAEtC,MAAMa,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAID,UAAU,EAAE,OAAO,SAAS;IAChC,IAAIhB,OAAO,KAAK,OAAO,EAAE,OAAO,SAAS;IACzC,IAAIA,OAAO,KAAK,OAAO,EAAE,OAAO,SAAS;IACzC,IAAIA,OAAO,KAAK,SAAS,EAAE,OAAO,aAAa;IAC/C,OAAOe,QAAQ,GAAG,SAAS,GAAG,SAAS;EACzC,CAAC;EAED,MAAMG,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIlB,OAAO,KAAK,OAAO,IAAIA,OAAO,KAAK,SAAS,EAAE,OAAO,SAAS;IAClE,OAAO,SAAS;EAClB,CAAC;EAED,MAAMmB,cAAc,GAAGA,CAAA,KAAM;IAC3B,IAAInB,OAAO,KAAK,SAAS,EAAE,OAAO,SAAS;IAC3C,OAAO,aAAa;EACtB,CAAC;EAED,oBACEV,IAAA,CAACP,SAAS;IACRmB,KAAK,EAAE,CACLkB,MAAM,CAACC,MAAM,EACb;MACEC,eAAe,EAAEL,kBAAkB,CAAC,CAAC;MACrChB,YAAY;MACZsB,WAAW,EAAEJ,cAAc,CAAC,CAAC;MAC7BK,WAAW,EAAExB,OAAO,KAAK,SAAS,GAAG,CAAC,GAAG;IAC3C,CAAC,EACDE,KAAK,CACL;IACFK,OAAO,EAAEG,WAAY;IACrBN,QAAQ,EAAEY,UAAW;IAAAS,QAAA,eAErBnC,IAAA,CAACJ,IAAI;MAACgB,KAAK,EAAEkB,MAAM,CAACM,OAAQ;MAAAD,QAAA,EACzBjB,OAAO,gBACNlB,IAAA,CAACH,iBAAiB;QAACwC,IAAI,EAAC,OAAO;QAACC,KAAK,EAAEV,YAAY,CAAC;MAAE,CAAE,CAAC,gBAEzD1B,KAAA,CAACR,IAAI;QAACkB,KAAK,EAAE,CAACkB,MAAM,CAACS,IAAI,EAAE;UAAED,KAAK,EAAEV,YAAY,CAAC;QAAE,CAAC,EAAEf,SAAS,CAAE;QAAAsB,QAAA,GAAC,eACnD,EAAC/B,QAAQ,CAACoC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGrC,QAAQ,CAACsC,KAAK,CAAC,CAAC,CAAC;MAAA,CAC9D;IACP,CACG;EAAC,CACE,CAAC;AAEhB,CAAC;AAED,MAAMZ,MAAM,GAAGnC,UAAU,CAACgD,MAAM,CAAC;EAC/BZ,MAAM,EAAE;IACNa,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,SAAS,EAAE,EAAE;IACbC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,KAAK,EAAE;EACT,CAAC;EACDb,OAAO,EAAE;IACPc,aAAa,EAAE,KAAK;IACpBF,UAAU,EAAE;EACd,CAAC;EACDT,IAAI,EAAE;IACJY,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import React, { useState } from "react";
4
+ import { Pressable, Text, StyleSheet, View, ActivityIndicator } from "react-native";
5
+ import { AuthModule } from "../Auth.web.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ async function performLogin(provider) {
8
+ await AuthModule.login(provider);
9
+ return AuthModule.currentUser ?? null;
10
+ }
11
+ export const SocialButton = ({
12
+ provider,
13
+ variant = "primary",
14
+ borderRadius = 8,
15
+ style,
16
+ textStyle,
17
+ disabled,
18
+ onSuccess,
19
+ onError,
20
+ onPress
21
+ }) => {
22
+ const [loading, setLoading] = useState(false);
23
+ const handleLogin = () => {
24
+ if (loading || disabled) return;
25
+ if (onPress) {
26
+ onPress();
27
+ return;
28
+ }
29
+ setLoading(true);
30
+ performLogin(provider).then(user => {
31
+ setLoading(false);
32
+ if (user) onSuccess?.(user);
33
+ }).catch(e => {
34
+ setLoading(false);
35
+ onError?.(e);
36
+ });
37
+ };
38
+ const isGoogle = provider === "google";
39
+ const isDisabled = loading || disabled;
40
+ const getBackgroundColor = () => {
41
+ if (isDisabled) return "#CCCCCC";
42
+ if (variant === "black") return "#000000";
43
+ if (variant === "white") return "#FFFFFF";
44
+ if (variant === "outline") return "transparent";
45
+ return isGoogle ? "#4285F4" : "#000000";
46
+ };
47
+ const getTextColor = () => {
48
+ if (variant === "white" || variant === "outline") return "#000000";
49
+ return "#FFFFFF";
50
+ };
51
+ const getBorderColor = () => {
52
+ if (variant === "outline") return "#DDDDDD";
53
+ return "transparent";
54
+ };
55
+ return /*#__PURE__*/_jsx(Pressable, {
56
+ style: [styles.button, {
57
+ backgroundColor: getBackgroundColor(),
58
+ borderRadius,
59
+ borderColor: getBorderColor(),
60
+ borderWidth: variant === "outline" ? 1 : 0
61
+ }, style],
62
+ onPress: handleLogin,
63
+ disabled: isDisabled,
64
+ children: /*#__PURE__*/_jsx(View, {
65
+ style: styles.content,
66
+ children: loading ? /*#__PURE__*/_jsx(ActivityIndicator, {
67
+ size: "small",
68
+ color: getTextColor()
69
+ }) : /*#__PURE__*/_jsxs(Text, {
70
+ style: [styles.text, {
71
+ color: getTextColor()
72
+ }, textStyle],
73
+ children: ["Sign in with ", provider.charAt(0).toUpperCase() + provider.slice(1)]
74
+ })
75
+ })
76
+ });
77
+ };
78
+ const styles = StyleSheet.create({
79
+ button: {
80
+ paddingVertical: 12,
81
+ paddingHorizontal: 16,
82
+ minHeight: 48,
83
+ justifyContent: "center",
84
+ alignItems: "center",
85
+ width: "100%"
86
+ },
87
+ content: {
88
+ flexDirection: "row",
89
+ alignItems: "center"
90
+ },
91
+ text: {
92
+ fontSize: 16,
93
+ fontWeight: "600"
94
+ }
95
+ });
96
+ //# sourceMappingURL=social-button.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","Pressable","Text","StyleSheet","View","ActivityIndicator","AuthModule","jsx","_jsx","jsxs","_jsxs","performLogin","provider","login","currentUser","SocialButton","variant","borderRadius","style","textStyle","disabled","onSuccess","onError","onPress","loading","setLoading","handleLogin","then","user","catch","e","isGoogle","isDisabled","getBackgroundColor","getTextColor","getBorderColor","styles","button","backgroundColor","borderColor","borderWidth","children","content","size","color","text","charAt","toUpperCase","slice","create","paddingVertical","paddingHorizontal","minHeight","justifyContent","alignItems","width","flexDirection","fontSize","fontWeight"],"sourceRoot":"../../../src","sources":["ui/social-button.web.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SACEC,SAAS,EACTC,IAAI,EACJC,UAAU,EACVC,IAAI,EAGJC,iBAAiB,QACZ,cAAc;AAErB,SAASC,UAAU,QAAQ,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAczC,eAAeC,YAAYA,CAACC,QAAsB,EAA4B;EAC5E,MAAMN,UAAU,CAACO,KAAK,CAACD,QAAQ,CAAC;EAChC,OAAON,UAAU,CAACQ,WAAW,IAAI,IAAI;AACvC;AAEA,OAAO,MAAMC,YAAyC,GAAGA,CAAC;EACxDH,QAAQ;EACRI,OAAO,GAAG,SAAS;EACnBC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC,SAAS;EACTC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGzB,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAM0B,WAAW,GAAGA,CAAA,KAAM;IACxB,IAAIF,OAAO,IAAIJ,QAAQ,EAAE;IACzB,IAAIG,OAAO,EAAE;MACXA,OAAO,CAAC,CAAC;MACT;IACF;IACAE,UAAU,CAAC,IAAI,CAAC;IAChBd,YAAY,CAACC,QAAQ,CAAC,CACnBe,IAAI,CAAEC,IAAI,IAAK;MACdH,UAAU,CAAC,KAAK,CAAC;MACjB,IAAIG,IAAI,EAAEP,SAAS,GAAGO,IAAI,CAAC;IAC7B,CAAC,CAAC,CACDC,KAAK,CAAEC,CAAC,IAAK;MACZL,UAAU,CAAC,KAAK,CAAC;MACjBH,OAAO,GAAGQ,CAAC,CAAC;IACd,CAAC,CAAC;EACN,CAAC;EAED,MAAMC,QAAQ,GAAGnB,QAAQ,KAAK,QAAQ;EACtC,MAAMoB,UAAU,GAAGR,OAAO,IAAIJ,QAAQ;EAEtC,MAAMa,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAID,UAAU,EAAE,OAAO,SAAS;IAChC,IAAIhB,OAAO,KAAK,OAAO,EAAE,OAAO,SAAS;IACzC,IAAIA,OAAO,KAAK,OAAO,EAAE,OAAO,SAAS;IACzC,IAAIA,OAAO,KAAK,SAAS,EAAE,OAAO,aAAa;IAC/C,OAAOe,QAAQ,GAAG,SAAS,GAAG,SAAS;EACzC,CAAC;EAED,MAAMG,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIlB,OAAO,KAAK,OAAO,IAAIA,OAAO,KAAK,SAAS,EAAE,OAAO,SAAS;IAClE,OAAO,SAAS;EAClB,CAAC;EAED,MAAMmB,cAAc,GAAGA,CAAA,KAAM;IAC3B,IAAInB,OAAO,KAAK,SAAS,EAAE,OAAO,SAAS;IAC3C,OAAO,aAAa;EACtB,CAAC;EAED,oBACER,IAAA,CAACP,SAAS;IACRiB,KAAK,EAAE,CACLkB,MAAM,CAACC,MAAM,EACb;MACEC,eAAe,EAAEL,kBAAkB,CAAC,CAAC;MACrChB,YAAY;MACZsB,WAAW,EAAEJ,cAAc,CAAC,CAAC;MAC7BK,WAAW,EAAExB,OAAO,KAAK,SAAS,GAAG,CAAC,GAAG;IAC3C,CAAC,EACDE,KAAK,CACL;IACFK,OAAO,EAAEG,WAAY;IACrBN,QAAQ,EAAEY,UAAW;IAAAS,QAAA,eAErBjC,IAAA,CAACJ,IAAI;MAACc,KAAK,EAAEkB,MAAM,CAACM,OAAQ;MAAAD,QAAA,EACzBjB,OAAO,gBACNhB,IAAA,CAACH,iBAAiB;QAACsC,IAAI,EAAC,OAAO;QAACC,KAAK,EAAEV,YAAY,CAAC;MAAE,CAAE,CAAC,gBAEzDxB,KAAA,CAACR,IAAI;QAACgB,KAAK,EAAE,CAACkB,MAAM,CAACS,IAAI,EAAE;UAAED,KAAK,EAAEV,YAAY,CAAC;QAAE,CAAC,EAAEf,SAAS,CAAE;QAAAsB,QAAA,GAAC,eACnD,EAAC7B,QAAQ,CAACkC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGnC,QAAQ,CAACoC,KAAK,CAAC,CAAC,CAAC;MAAA,CAC9D;IACP,CACG;EAAC,CACE,CAAC;AAEhB,CAAC;AAED,MAAMZ,MAAM,GAAGjC,UAAU,CAAC8C,MAAM,CAAC;EAC/BZ,MAAM,EAAE;IACNa,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,SAAS,EAAE,EAAE;IACbC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,KAAK,EAAE;EACT,CAAC;EACDb,OAAO,EAAE;IACPc,aAAa,EAAE,KAAK;IACpBF,UAAU,EAAE;EACd,CAAC;EACDT,IAAI,EAAE;IACJY,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}