@libreapps/auth 3.0.1

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 (127) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +20 -0
  3. package/LICENSE.md +21 -0
  4. package/README.md +61 -0
  5. package/components/auth-widget.tsx +110 -0
  6. package/components/email-password-form.tsx +96 -0
  7. package/components/index.ts +4 -0
  8. package/components/login-panel.tsx +207 -0
  9. package/components/signup-panel.tsx +213 -0
  10. package/dist/components/auth-widget.d.ts +13 -0
  11. package/dist/components/auth-widget.js +33 -0
  12. package/dist/components/auth-widget.js.map +1 -0
  13. package/dist/components/email-password-form.d.ts +8 -0
  14. package/dist/components/email-password-form.js +25 -0
  15. package/dist/components/email-password-form.js.map +1 -0
  16. package/dist/components/index.d.ts +4 -0
  17. package/dist/components/index.js +5 -0
  18. package/dist/components/index.js.map +1 -0
  19. package/dist/components/login-panel.d.ts +13 -0
  20. package/dist/components/login-panel.js +104 -0
  21. package/dist/components/login-panel.js.map +1 -0
  22. package/dist/components/signup-panel.d.ts +13 -0
  23. package/dist/components/signup-panel.js +104 -0
  24. package/dist/components/signup-panel.js.map +1 -0
  25. package/dist/icons/ethereum.d.ts +4 -0
  26. package/dist/icons/ethereum.js +6 -0
  27. package/dist/icons/ethereum.js.map +1 -0
  28. package/dist/icons/facebook.d.ts +4 -0
  29. package/dist/icons/facebook.js +6 -0
  30. package/dist/icons/facebook.js.map +1 -0
  31. package/dist/icons/github.d.ts +4 -0
  32. package/dist/icons/github.js +6 -0
  33. package/dist/icons/github.js.map +1 -0
  34. package/dist/icons/google.d.ts +4 -0
  35. package/dist/icons/google.js +6 -0
  36. package/dist/icons/google.js.map +1 -0
  37. package/dist/icons/index.d.ts +6 -0
  38. package/dist/icons/index.js +7 -0
  39. package/dist/icons/index.js.map +1 -0
  40. package/dist/index.d.ts +24 -0
  41. package/dist/index.js +24 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/server/firebase-support.d.ts +8 -0
  44. package/dist/server/firebase-support.js +151 -0
  45. package/dist/server/firebase-support.js.map +1 -0
  46. package/dist/server/index.d.ts +4 -0
  47. package/dist/server/index.js +7 -0
  48. package/dist/server/index.js.map +1 -0
  49. package/dist/server/rest-api-handlers.d.ts +4 -0
  50. package/dist/server/rest-api-handlers.js +23 -0
  51. package/dist/server/rest-api-handlers.js.map +1 -0
  52. package/dist/server/stub-server.d.ts +14 -0
  53. package/dist/server/stub-server.js +23 -0
  54. package/dist/server/stub-server.js.map +1 -0
  55. package/dist/service/auth-service.d.ts +29 -0
  56. package/dist/service/auth-service.js +2 -0
  57. package/dist/service/auth-service.js.map +1 -0
  58. package/dist/service/context.d.ts +9 -0
  59. package/dist/service/context.js +16 -0
  60. package/dist/service/context.js.map +1 -0
  61. package/dist/service/get-singleton.d.ts +4 -0
  62. package/dist/service/get-singleton.js +24 -0
  63. package/dist/service/get-singleton.js.map +1 -0
  64. package/dist/service/impl/firebase-support.d.ts +34 -0
  65. package/dist/service/impl/firebase-support.js +190 -0
  66. package/dist/service/impl/firebase-support.js.map +1 -0
  67. package/dist/service/impl/index.d.ts +32 -0
  68. package/dist/service/impl/index.js +179 -0
  69. package/dist/service/impl/index.js.map +1 -0
  70. package/dist/service/impl/stub-auth-service.d.ts +42 -0
  71. package/dist/service/impl/stub-auth-service.js +97 -0
  72. package/dist/service/impl/stub-auth-service.js.map +1 -0
  73. package/dist/service/impl/wallet-support.d.ts +8 -0
  74. package/dist/service/impl/wallet-support.js +82 -0
  75. package/dist/service/impl/wallet-support.js.map +1 -0
  76. package/dist/service/index.d.ts +4 -0
  77. package/dist/service/index.js +4 -0
  78. package/dist/service/index.js.map +1 -0
  79. package/dist/service/provider-registry.d.ts +37 -0
  80. package/dist/service/provider-registry.js +58 -0
  81. package/dist/service/provider-registry.js.map +1 -0
  82. package/dist/types/api-response.d.ts +8 -0
  83. package/dist/types/api-response.js +2 -0
  84. package/dist/types/api-response.js.map +1 -0
  85. package/dist/types/auth-service-conf.d.ts +5 -0
  86. package/dist/types/auth-service-conf.js +2 -0
  87. package/dist/types/auth-service-conf.js.map +1 -0
  88. package/dist/types/index.d.ts +4 -0
  89. package/dist/types/index.js +2 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/libreapps-user-info-value.d.ts +6 -0
  92. package/dist/types/libreapps-user-info-value.js +2 -0
  93. package/dist/types/libreapps-user-info-value.js.map +1 -0
  94. package/dist/types/libreapps-user-info.d.ts +6 -0
  95. package/dist/types/libreapps-user-info.js +2 -0
  96. package/dist/types/libreapps-user-info.js.map +1 -0
  97. package/dist/util/analytics.d.ts +9 -0
  98. package/dist/util/analytics.js +10 -0
  99. package/dist/util/analytics.js.map +1 -0
  100. package/icons/ethereum.tsx +18 -0
  101. package/icons/facebook.tsx +11 -0
  102. package/icons/github.tsx +14 -0
  103. package/icons/google.tsx +13 -0
  104. package/icons/index.ts +16 -0
  105. package/index.ts +51 -0
  106. package/libreapps-ui.d.ts +23 -0
  107. package/package.json +57 -0
  108. package/server/firebase-support.ts +176 -0
  109. package/server/index.ts +14 -0
  110. package/server/rest-api-handlers.ts +33 -0
  111. package/server/stub-server.ts +28 -0
  112. package/service/auth-service.ts +21 -0
  113. package/service/context.tsx +46 -0
  114. package/service/get-singleton.ts +37 -0
  115. package/service/impl/firebase-support.ts +241 -0
  116. package/service/impl/index.ts +231 -0
  117. package/service/impl/stub-auth-service.ts +131 -0
  118. package/service/impl/wallet-support.ts +100 -0
  119. package/service/index.ts +11 -0
  120. package/service/provider-registry.ts +71 -0
  121. package/tsconfig.json +15 -0
  122. package/types/api-response.ts +5 -0
  123. package/types/auth-service-conf.ts +9 -0
  124. package/types/index.ts +6 -0
  125. package/types/libreapps-user-info-value.ts +9 -0
  126. package/types/libreapps-user-info.ts +9 -0
  127. package/util/analytics.ts +21 -0
@@ -0,0 +1,190 @@
1
+ import { FacebookAuthProvider, GoogleAuthProvider, GithubAuthProvider, signInWithPopup, createUserWithEmailAndPassword, signInWithEmailAndPassword, signInWithCustomToken, } from 'firebase/auth';
2
+ import { initializeApp, getApps, FirebaseError } from "firebase/app";
3
+ import { getAuth } from "firebase/auth";
4
+ import { getFirestore } from 'firebase/firestore';
5
+ export const firebaseConfig = {
6
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
7
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
8
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
9
+ storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
10
+ messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
11
+ appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
12
+ };
13
+ // Check if Firebase is configured
14
+ const isFirebaseConfigured = () => {
15
+ return firebaseConfig.apiKey && firebaseConfig.projectId;
16
+ };
17
+ // Initialize Firebase only if configured
18
+ let firebaseApp = null;
19
+ let auth = null;
20
+ let db = null;
21
+ if (isFirebaseConfigured()) {
22
+ firebaseApp = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0];
23
+ auth = getAuth(firebaseApp);
24
+ db = getFirestore(firebaseApp, 'accounts');
25
+ }
26
+ else {
27
+ console.warn('Firebase is not configured. Auth features will not work.');
28
+ }
29
+ export { auth, db };
30
+ export async function loginWithProvider(provider) {
31
+ if (!auth) {
32
+ console.warn('Firebase auth not configured');
33
+ return { success: false, user: null };
34
+ }
35
+ const authProvider = (() => {
36
+ switch (provider) {
37
+ case 'google':
38
+ return new GoogleAuthProvider();
39
+ case 'facebook':
40
+ return new FacebookAuthProvider();
41
+ case 'github':
42
+ return new GithubAuthProvider();
43
+ default:
44
+ return null;
45
+ }
46
+ })();
47
+ if (!authProvider) {
48
+ return { success: false, user: null };
49
+ }
50
+ try {
51
+ const userCreds = await signInWithPopup(auth, authProvider);
52
+ const idToken = await userCreds.user.getIdToken();
53
+ const response = await fetch('/api/auth/login', {
54
+ method: 'POST',
55
+ headers: { 'Content-Type': 'application/json' },
56
+ body: JSON.stringify({ idToken }),
57
+ });
58
+ const resBody = (await response.json());
59
+ if (response.ok && resBody.success) {
60
+ return { success: true, user: userCreds.user };
61
+ }
62
+ else {
63
+ return { success: false, user: null };
64
+ }
65
+ }
66
+ catch (error) {
67
+ console.error('Error signing in with Google', error);
68
+ return { success: false, user: null };
69
+ }
70
+ }
71
+ const isAuthUserNotFound = (e) => (typeof e === 'object' &&
72
+ e !== null &&
73
+ e.hasOwnProperty('code') &&
74
+ e.code === 'auth/user-not-found');
75
+ export async function signupWithEmailAndPassword(email, password) {
76
+ if (!auth) {
77
+ return { success: false, message: 'Firebase auth not configured' };
78
+ }
79
+ let user = undefined;
80
+ try {
81
+ const userCredential = await createUserWithEmailAndPassword(auth, email, password);
82
+ user = userCredential.user;
83
+ }
84
+ catch (error) {
85
+ if (error instanceof FirebaseError) {
86
+ console.error(error.code);
87
+ return { success: false, message: error.code };
88
+ }
89
+ return { success: false, message: error };
90
+ }
91
+ try {
92
+ const idToken = await user.getIdToken();
93
+ const response = await fetch('/api/auth/login', {
94
+ method: 'POST',
95
+ headers: { 'Content-Type': 'application/json' },
96
+ body: JSON.stringify({ idToken }),
97
+ });
98
+ const resBody = (await response.json());
99
+ if (response.ok && resBody.success) {
100
+ return { success: true, user };
101
+ }
102
+ else {
103
+ return { success: false };
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error('Error signing in with Firebase auth', error);
108
+ return { success: false };
109
+ }
110
+ }
111
+ export async function loginWithEmailAndPassword(email, password) {
112
+ if (!auth) {
113
+ return { success: false, message: 'Firebase auth not configured' };
114
+ }
115
+ let user = undefined;
116
+ try {
117
+ const userCredential = await signInWithEmailAndPassword(auth, email, password);
118
+ user = userCredential.user;
119
+ }
120
+ catch (error) {
121
+ if (error instanceof FirebaseError) {
122
+ console.error(error.code);
123
+ return { success: false, message: error.code };
124
+ }
125
+ return { success: false, message: error };
126
+ }
127
+ try {
128
+ const idToken = await user.getIdToken();
129
+ const response = await fetch('/api/auth/login', {
130
+ method: 'POST',
131
+ headers: { 'Content-Type': 'application/json' },
132
+ body: JSON.stringify({ idToken }),
133
+ });
134
+ const resBody = (await response.json());
135
+ if (response.ok && resBody.success) {
136
+ return { success: true, user, message: "Login Successfully!" };
137
+ }
138
+ else {
139
+ return { success: false, message: "Login API Failed" };
140
+ }
141
+ }
142
+ catch (error) {
143
+ console.error('Error signing in with Firebase auth', error);
144
+ return { success: false, message: "Error signing in with Firebase auth" };
145
+ }
146
+ }
147
+ export async function loginWithCustomToken(token) {
148
+ if (!auth) {
149
+ return { success: false };
150
+ }
151
+ let user = undefined;
152
+ const userCredential = await signInWithCustomToken(auth, token);
153
+ user = userCredential.user;
154
+ try {
155
+ const idToken = await user.getIdToken();
156
+ const response = await fetch('/api/auth/login', {
157
+ method: 'POST',
158
+ headers: { 'Content-Type': 'application/json' },
159
+ body: JSON.stringify({ idToken }),
160
+ });
161
+ const resBody = (await response.json());
162
+ if (response.ok && resBody.success) {
163
+ return { success: true, user };
164
+ }
165
+ else {
166
+ return { success: false };
167
+ }
168
+ }
169
+ catch (error) {
170
+ console.error('Error signing in with Firebase auth', error);
171
+ return { success: false };
172
+ }
173
+ }
174
+ export async function logoutBackend() {
175
+ try {
176
+ const response = await fetch('/api/auth/logout', { headers: { 'Content-Type': 'application/json' } });
177
+ const resBody = (await response.json());
178
+ if (response.ok && resBody.success) {
179
+ return { success: true };
180
+ }
181
+ else {
182
+ return { success: false };
183
+ }
184
+ }
185
+ catch (error) {
186
+ console.error('Error logging on on server with Firebase', error);
187
+ return { success: false };
188
+ }
189
+ }
190
+ //# sourceMappingURL=firebase-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-support.js","sourceRoot":"","sources":["../../../service/impl/firebase-support.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,8BAA8B,EAE9B,0BAA0B,EAC1B,qBAAqB,GAEtB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAA;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAA;AAIjE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B;IAChD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC;IACxD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B;IACtD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;IAC9D,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wCAAwC;IACvE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;CAC/C,CAAA;AAED,kCAAkC;AAClC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,OAAO,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,SAAS,CAAA;AAC1D,CAAC,CAAA;AAED,yCAAyC;AACzC,IAAI,WAAW,GAAuB,IAAI,CAAA;AAC1C,IAAI,IAAI,GAAgB,IAAI,CAAA;AAC5B,IAAI,EAAE,GAAqB,IAAI,CAAA;AAE/B,IAAI,oBAAoB,EAAE,EAAE,CAAC;IAC3B,WAAW,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACnF,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;AAC5C,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;AAC1E,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;AAEnB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;QACzB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,IAAI,kBAAkB,EAAE,CAAA;YACjC,KAAK,UAAU;gBACb,OAAO,IAAI,oBAAoB,EAAE,CAAA;YACnC,KAAK,QAAQ;gBACX,OAAO,IAAI,kBAAkB,EAAE,CAAA;YACjC;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;QAEzE,IAAI,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAA;QAChD,CAAC;aACI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;QACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvC,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CACrC,OAAO,CAAC,KAAK,QAAQ;IACrB,CAAC,KAAK,IAAI;IACV,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;IACxB,CAAC,CAAC,IAAI,KAAK,qBAAqB,CACjC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,KAAa,EACb,QAAgB;IAEhB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAA;IACpE,CAAC;IAED,IAAI,IAAI,GAAqB,SAAS,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAClF,IAAI,GAAG,cAAc,CAAC,IAAI,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAc,EAAC,CAAA;QACxD,CAAC;QACD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAe,EAAC,CAAA;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;QAEzE,IAAI,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QAChC,CAAC;aACI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAa,EACb,QAAgB;IAEhB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAA;IACpE,CAAC;IAED,IAAI,IAAI,GAAqB,SAAS,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC9E,IAAI,GAAG,cAAc,CAAC,IAAI,CAAA;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAc,EAAC,CAAA;QACxD,CAAC;QACD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAe,EAAC,CAAA;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;QAEzE,IAAI,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAA;QAChE,CAAC;aACI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAG,OAAO,EAAE,kBAAkB,EAAC,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa;IAEb,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,IAAI,GAAqB,SAAS,CAAA;IACtC,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC/D,IAAI,GAAG,cAAc,CAAC,IAAI,CAAA;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;QAEzE,IAAI,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QAChC,CAAC;aACI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAEjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QACrG,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;QACzE,IAAI,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC1B,CAAC;aACI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAA;QAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type AuthService from '../auth-service';
2
+ import type { AuthServiceConf, LibreAppsUserInfo, LibreAppsUserInfoValue } from '../../types';
3
+ declare class AuthServiceImpl implements AuthService {
4
+ private _hzUser;
5
+ constructor(conf: AuthServiceConf, user: LibreAppsUserInfoValue | null);
6
+ get user(): LibreAppsUserInfo | null;
7
+ get loggedIn(): boolean;
8
+ signupEmailAndPassword: (email: string, password: string) => Promise<{
9
+ success: boolean;
10
+ userInfo: LibreAppsUserInfo | null;
11
+ message?: string;
12
+ }>;
13
+ loginEmailAndPassword: (email: string, password: string) => Promise<{
14
+ success: boolean;
15
+ userInfo: LibreAppsUserInfo | null;
16
+ message?: string;
17
+ }>;
18
+ loginWithProvider: (provider: "google" | "facebook" | "github") => Promise<{
19
+ success: boolean;
20
+ userInfo: LibreAppsUserInfo | null;
21
+ }>;
22
+ loginWithCustomToken: (token: string) => Promise<{
23
+ success: boolean;
24
+ userInfo: LibreAppsUserInfo | null;
25
+ }>;
26
+ associateWallet: () => Promise<void>;
27
+ logout: () => Promise<{
28
+ success: boolean;
29
+ }>;
30
+ setServerSideUser: (user: LibreAppsUserInfoValue | null) => void;
31
+ }
32
+ export default AuthServiceImpl;
@@ -0,0 +1,179 @@
1
+ import { makeAutoObservable, makeObservable, computed } from 'mobx';
2
+ import { auth as fbAuth, signupWithEmailAndPassword, loginWithCustomToken, loginWithEmailAndPassword, loginWithProvider, logoutBackend } from './firebase-support';
3
+ import { associateWalletAddressWithAccount, getAssociatedWalletAddress } from './wallet-support';
4
+ class LibreAppsUserInfoStore {
5
+ constructor() {
6
+ this._email = '';
7
+ this._displayName = null;
8
+ this._walletAddress = null;
9
+ makeAutoObservable(this);
10
+ }
11
+ get email() { return this._email; }
12
+ get displayName() { return this._displayName; }
13
+ get walletAddress() { return this._walletAddress; }
14
+ clear() {
15
+ this._email = '';
16
+ this._displayName = null;
17
+ this._walletAddress = null;
18
+ }
19
+ set(v) {
20
+ this._email = v.email;
21
+ this._displayName = v.displayName;
22
+ this._walletAddress = v.walletAddress;
23
+ }
24
+ get isValid() {
25
+ return (this._email.length > 0);
26
+ }
27
+ }
28
+ class AuthServiceImpl {
29
+ constructor(conf, user) {
30
+ this._hzUser = new LibreAppsUserInfoStore();
31
+ this.signupEmailAndPassword = async (email, password) => {
32
+ try {
33
+ this._hzUser.clear();
34
+ const res = await signupWithEmailAndPassword(email, password);
35
+ if (res.success && res.user) {
36
+ const walletAddress = res.user.email ? await getAssociatedWalletAddress(res.user.email) : undefined;
37
+ this._hzUser.set({
38
+ email: res.user.email ?? '',
39
+ displayName: res.user.displayName ?? null,
40
+ walletAddress: walletAddress?.result ?? null
41
+ });
42
+ return {
43
+ success: true,
44
+ userInfo: this._hzUser,
45
+ message: res.message
46
+ };
47
+ }
48
+ return {
49
+ success: false,
50
+ userInfo: null,
51
+ message: res.message
52
+ };
53
+ }
54
+ catch (e) {
55
+ console.error('Error signing in with Firebase auth', e);
56
+ return { success: false, userInfo: null, message: 'Error signing in with Firebase auth' };
57
+ }
58
+ };
59
+ this.loginEmailAndPassword = async (email, password) => {
60
+ try {
61
+ this._hzUser.clear();
62
+ const res = await loginWithEmailAndPassword(email, password);
63
+ if (res.success && res.user) {
64
+ const walletAddress = res.user.email ? await getAssociatedWalletAddress(res.user.email) : undefined;
65
+ this._hzUser.set({
66
+ email: res.user.email ?? '',
67
+ displayName: res.user.displayName ?? null,
68
+ walletAddress: walletAddress?.result ?? null
69
+ });
70
+ return {
71
+ success: true,
72
+ userInfo: this._hzUser,
73
+ message: res.message
74
+ };
75
+ }
76
+ return {
77
+ success: false,
78
+ userInfo: null,
79
+ message: res.message
80
+ };
81
+ }
82
+ catch (e) {
83
+ console.error('Error signing in with Firebase auth', e);
84
+ return { success: false, userInfo: null, message: 'Error signing in with Firebase auth' };
85
+ }
86
+ };
87
+ this.loginWithProvider = async (provider) => {
88
+ try {
89
+ this._hzUser.clear();
90
+ const res = await loginWithProvider(provider);
91
+ if (res.success && res.user) {
92
+ const walletAddress = res.user.email ? await getAssociatedWalletAddress(res.user.email) : undefined;
93
+ this._hzUser.set({
94
+ email: res.user.email ?? '',
95
+ displayName: res.user.displayName ?? null,
96
+ walletAddress: walletAddress?.result ?? null
97
+ });
98
+ return {
99
+ success: true,
100
+ userInfo: this._hzUser
101
+ };
102
+ }
103
+ return {
104
+ success: false,
105
+ userInfo: null
106
+ };
107
+ }
108
+ catch (e) {
109
+ console.error('Error signing in with Firebase auth', e);
110
+ return { success: false, userInfo: null };
111
+ }
112
+ };
113
+ this.loginWithCustomToken = async (token) => {
114
+ try {
115
+ this._hzUser.clear();
116
+ const res = await loginWithCustomToken(token);
117
+ if (res.success && res.user) {
118
+ const walletAddress = res.user.email ? await getAssociatedWalletAddress(res.user.email) : undefined;
119
+ this._hzUser.set({
120
+ email: res.user.email ?? '',
121
+ displayName: res.user.displayName ?? null,
122
+ walletAddress: walletAddress?.result ?? null
123
+ });
124
+ return {
125
+ success: true,
126
+ userInfo: this._hzUser
127
+ };
128
+ }
129
+ return {
130
+ success: false,
131
+ userInfo: null
132
+ };
133
+ }
134
+ catch (e) {
135
+ console.error('Error signing in with Firebase auth', e);
136
+ return { success: false, userInfo: null };
137
+ }
138
+ };
139
+ this.associateWallet = async () => {
140
+ if (this._hzUser.isValid) {
141
+ const res = await associateWalletAddressWithAccount(this._hzUser.email);
142
+ if (!res.error) {
143
+ //runInAction(() => {
144
+ this._hzUser._walletAddress = res.result ?? null;
145
+ //})
146
+ }
147
+ }
148
+ };
149
+ this.logout = async () => {
150
+ if (fbAuth) {
151
+ await fbAuth.signOut();
152
+ }
153
+ this._hzUser.clear();
154
+ return await logoutBackend();
155
+ };
156
+ this.setServerSideUser = (user) => {
157
+ if (user) {
158
+ this._hzUser.set(user);
159
+ }
160
+ };
161
+ makeObservable(this, {
162
+ loggedIn: computed,
163
+ user: computed
164
+ });
165
+ // ignore conf for now
166
+ if (user) {
167
+ this._hzUser.set(user);
168
+ }
169
+ }
170
+ get user() {
171
+ return this._hzUser.isValid ? this._hzUser : null;
172
+ }
173
+ get loggedIn() {
174
+ return (
175
+ /*!!fbAuth.currentUser &&*/ this._hzUser.isValid);
176
+ }
177
+ }
178
+ export default AuthServiceImpl;
179
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../service/impl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAG,MAAM,MAAM,CAAA;AAKpE,OAAO,EACL,IAAI,IAAI,MAAM,EACd,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAEhG,MAAM,sBAAsB;IAE1B;QAIA,WAAM,GAAW,EAAE,CAAA;QACnB,iBAAY,GAAkB,IAAI,CAAA;QAClC,mBAAc,GAAkB,IAAI,CAAA;QALlC,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAMD,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAA,CAAA,CAAC;IACzC,IAAI,WAAW,KAAoB,OAAO,IAAI,CAAC,YAAY,CAAA,CAAA,CAAC;IAC5D,IAAI,aAAa,KAAoB,OAAO,IAAI,CAAC,cAAc,CAAA,CAAA,CAAC;IAEhE,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,CAAyB;QAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,WAAW,CAAA;QACjC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,aAAa,CAAA;IACvC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjC,CAAC;CACF;AAID,MAAM,eAAe;IAInB,YAAY,IAAqB,EAAE,IAAmC;QAF9D,YAAO,GAAG,IAAI,sBAAsB,EAAE,CAAA;QAwB9C,2BAAsB,GAAG,KAAK,EAC5B,KAAa,EACb,QAAgB,EACqE,EAAE;YAEvF,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACpB,MAAM,GAAG,GAAG,MAAM,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC7D,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBACnG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACf,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC3B,WAAW,EAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI;wBAC1C,aAAa,EAAG,aAAa,EAAE,MAAM,IAAI,IAAI;qBAC9C,CAAC,CAAA;oBAEF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,OAAO;wBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAA;YACH,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAA;gBACvD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,qCAAqC,EAAC,CAAA;YACzF,CAAC;QACH,CAAC,CAAA;QAED,0BAAqB,GAAG,KAAK,EAC3B,KAAa,EACb,QAAgB,EACqE,EAAE;YAEvF,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACpB,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC5D,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBACnG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACf,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC3B,WAAW,EAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI;wBAC1C,aAAa,EAAG,aAAa,EAAE,MAAM,IAAI,IAAI;qBAC9C,CAAC,CAAA;oBAEF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,OAAO;wBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAA;YACH,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAA;gBACvD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,qCAAqC,EAAC,CAAA;YACzF,CAAC;QACH,CAAC,CAAA;QAED,sBAAiB,GAAG,KAAK,EACvB,QAA0C,EACyB,EAAE;YAErE,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACpB,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAC7C,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBACnG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACf,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC3B,WAAW,EAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI;wBAC1C,aAAa,EAAG,aAAa,EAAE,MAAM,IAAI,IAAI;qBAC9C,CAAC,CAAA;oBAEF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,OAAO;qBACvB,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;iBACf,CAAA;YACH,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAA;gBACvD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAA;YACzC,CAAC;QACH,CAAC,CAAA;QAED,yBAAoB,GAAG,KAAK,EAC1B,KAAa,EACsD,EAAE;YAErE,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACpB,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAC7C,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBACnG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACf,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC3B,WAAW,EAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI;wBAC1C,aAAa,EAAG,aAAa,EAAE,MAAM,IAAI,IAAI;qBAC9C,CAAC,CAAA;oBAEF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,OAAO;qBACvB,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;iBACf,CAAA;YACH,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAA;gBACvD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAA;YACzC,CAAC;QACH,CAAC,CAAA;QAED,oBAAe,GAAG,KAAK,IAAoB,EAAE;YAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,MAAM,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACvE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,qBAAqB;oBACnB,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAA;oBAClD,IAAI;gBACN,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,WAAM,GAAG,KAAK,IAAmC,EAAE;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;YACxB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,OAAO,MAAM,aAAa,EAAE,CAAA;QAC9B,CAAC,CAAA;QAED,sBAAiB,GAAG,CAAC,IAAmC,EAAG,EAAE;YAC3D,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACH,CAAC,CAAA;QA7KC,cAAc,CAAC,IAAI,EAAE;YACnB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QACA,sBAAsB;QACxB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,CAAC;IAED,IAAI,QAAQ;QACV,OAAO;QACL,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CACjD,CAAA;IACH,CAAC;CA4JF;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Stub Authentication Service
3
+ *
4
+ * This implementation is used when no auth provider is configured.
5
+ * All auth operations return unsuccessful results gracefully.
6
+ */
7
+ import type AuthService from '../auth-service';
8
+ import type { AuthServiceConf, LibreAppsUserInfo, LibreAppsUserInfoValue } from '../../types';
9
+ /**
10
+ * Stub auth service that does nothing but returns graceful failures.
11
+ * Used when no auth provider is configured.
12
+ */
13
+ export declare class StubAuthService implements AuthService {
14
+ private _hzUser;
15
+ constructor(conf: AuthServiceConf, user: LibreAppsUserInfoValue | null);
16
+ get user(): LibreAppsUserInfo | null;
17
+ get loggedIn(): boolean;
18
+ signupEmailAndPassword: (_email: string, _password: string) => Promise<{
19
+ success: boolean;
20
+ userInfo: LibreAppsUserInfo | null;
21
+ message?: string;
22
+ }>;
23
+ loginEmailAndPassword: (_email: string, _password: string) => Promise<{
24
+ success: boolean;
25
+ userInfo: LibreAppsUserInfo | null;
26
+ message?: string;
27
+ }>;
28
+ loginWithProvider: (_provider: "google" | "facebook" | "github") => Promise<{
29
+ success: boolean;
30
+ userInfo: LibreAppsUserInfo | null;
31
+ }>;
32
+ loginWithCustomToken: (_token: string) => Promise<{
33
+ success: boolean;
34
+ userInfo: LibreAppsUserInfo | null;
35
+ }>;
36
+ associateWallet: () => Promise<void>;
37
+ logout: () => Promise<{
38
+ success: boolean;
39
+ }>;
40
+ setServerSideUser: (user: LibreAppsUserInfoValue | null) => void;
41
+ }
42
+ export default StubAuthService;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Stub Authentication Service
3
+ *
4
+ * This implementation is used when no auth provider is configured.
5
+ * All auth operations return unsuccessful results gracefully.
6
+ */
7
+ import { makeAutoObservable, makeObservable, computed } from 'mobx';
8
+ class LibreAppsUserInfoStore {
9
+ constructor() {
10
+ this._email = '';
11
+ this._displayName = null;
12
+ this._walletAddress = null;
13
+ makeAutoObservable(this);
14
+ }
15
+ get email() { return this._email; }
16
+ get displayName() { return this._displayName; }
17
+ get walletAddress() { return this._walletAddress; }
18
+ clear() {
19
+ this._email = '';
20
+ this._displayName = null;
21
+ this._walletAddress = null;
22
+ }
23
+ set(v) {
24
+ this._email = v.email;
25
+ this._displayName = v.displayName;
26
+ this._walletAddress = v.walletAddress;
27
+ }
28
+ get isValid() {
29
+ return (this._email.length > 0);
30
+ }
31
+ }
32
+ /**
33
+ * Stub auth service that does nothing but returns graceful failures.
34
+ * Used when no auth provider is configured.
35
+ */
36
+ export class StubAuthService {
37
+ constructor(conf, user) {
38
+ this._hzUser = new LibreAppsUserInfoStore();
39
+ this.signupEmailAndPassword = async (_email, _password) => {
40
+ console.warn('Auth provider not configured. Install @libreapps/auth-firebase or another auth provider.');
41
+ return {
42
+ success: false,
43
+ userInfo: null,
44
+ message: 'Auth provider not configured'
45
+ };
46
+ };
47
+ this.loginEmailAndPassword = async (_email, _password) => {
48
+ console.warn('Auth provider not configured. Install @libreapps/auth-firebase or another auth provider.');
49
+ return {
50
+ success: false,
51
+ userInfo: null,
52
+ message: 'Auth provider not configured'
53
+ };
54
+ };
55
+ this.loginWithProvider = async (_provider) => {
56
+ console.warn('Auth provider not configured. Install @libreapps/auth-firebase or another auth provider.');
57
+ return {
58
+ success: false,
59
+ userInfo: null
60
+ };
61
+ };
62
+ this.loginWithCustomToken = async (_token) => {
63
+ console.warn('Auth provider not configured. Install @libreapps/auth-firebase or another auth provider.');
64
+ return {
65
+ success: false,
66
+ userInfo: null
67
+ };
68
+ };
69
+ this.associateWallet = async () => {
70
+ console.warn('Auth provider not configured. Install @libreapps/auth-firebase or another auth provider.');
71
+ };
72
+ this.logout = async () => {
73
+ this._hzUser.clear();
74
+ return { success: true };
75
+ };
76
+ this.setServerSideUser = (user) => {
77
+ if (user) {
78
+ this._hzUser.set(user);
79
+ }
80
+ };
81
+ makeObservable(this, {
82
+ loggedIn: computed,
83
+ user: computed
84
+ });
85
+ if (user) {
86
+ this._hzUser.set(user);
87
+ }
88
+ }
89
+ get user() {
90
+ return this._hzUser.isValid ? this._hzUser : null;
91
+ }
92
+ get loggedIn() {
93
+ return this._hzUser.isValid;
94
+ }
95
+ }
96
+ export default StubAuthService;
97
+ //# sourceMappingURL=stub-auth-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub-auth-service.js","sourceRoot":"","sources":["../../../service/impl/stub-auth-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function associateWalletAddressWithAccount(userEmail: string, siteName?: string): Promise<{
2
+ result: string | null;
3
+ error: unknown;
4
+ }>;
5
+ export declare function getAssociatedWalletAddress(userEmail: string): Promise<{
6
+ error: any;
7
+ result?: string;
8
+ }>;
@@ -0,0 +1,82 @@
1
+ import { collection, doc, getDoc, setDoc } from 'firebase/firestore';
2
+ import { auth, db } from './firebase-support';
3
+ const isObject = (obj) => typeof obj === 'object' && obj !== null;
4
+ const isGlobalThisEthereum = (obj) => isObject(obj) && isObject(obj.ethereum) && typeof obj.ethereum.request === 'function';
5
+ const getEthereum = (obj) => isGlobalThisEthereum(obj) ? obj.ethereum : null;
6
+ const ethereum = getEthereum(globalThis);
7
+ let signMessage = (opts) => `${opts.siteName} wants you to sign in with your Ethereum account:\n${opts.address}`;
8
+ const USER_INFO_COLLECTION = 'HZ_USER_INFO';
9
+ async function connectWalletAddress(siteName) {
10
+ if (!ethereum) {
11
+ throw new Error('No ethereum provider found');
12
+ }
13
+ if (!auth) {
14
+ throw new Error('Firebase auth not configured');
15
+ }
16
+ const [account] = await ethereum.request({ method: 'eth_requestAccounts' });
17
+ if (!account) {
18
+ throw new Error('No account found');
19
+ }
20
+ const signed = await ethereum.request({
21
+ method: 'personal_sign',
22
+ params: [
23
+ signMessage({
24
+ siteName: siteName ?? auth.app.options.projectId ?? globalThis.location.hostname,
25
+ address: account,
26
+ }),
27
+ account,
28
+ auth.app.options.appId,
29
+ ],
30
+ });
31
+ if (!signed) {
32
+ throw new Error('Not signed');
33
+ }
34
+ return { account, signed };
35
+ }
36
+ export async function associateWalletAddressWithAccount(userEmail, siteName) {
37
+ const { account } = await connectWalletAddress(siteName);
38
+ if (!db) {
39
+ return { result: null, error: new Error('Firebase Firestore not configured') };
40
+ }
41
+ let result = null;
42
+ let error = null;
43
+ const accountsRef = collection(db, USER_INFO_COLLECTION);
44
+ try {
45
+ try {
46
+ await setDoc(doc(accountsRef, userEmail), { walletAddress: account });
47
+ result = account;
48
+ }
49
+ catch (e) {
50
+ console.error(e);
51
+ error = e;
52
+ }
53
+ }
54
+ catch (e) {
55
+ console.error(e);
56
+ error = e;
57
+ }
58
+ return { result, error };
59
+ }
60
+ export async function getAssociatedWalletAddress(userEmail) {
61
+ if (!db) {
62
+ return { error: new Error('Firebase Firestore not configured'), result: undefined };
63
+ }
64
+ let result = undefined;
65
+ let error = null;
66
+ try {
67
+ try {
68
+ const docRef = await getDoc(doc(db, USER_INFO_COLLECTION, userEmail));
69
+ result = docRef.data() ? docRef.data().walletAddress : undefined;
70
+ }
71
+ catch (e) {
72
+ console.error(e);
73
+ error = e;
74
+ }
75
+ }
76
+ catch (e) {
77
+ console.error(e);
78
+ error = e;
79
+ }
80
+ return { result, error };
81
+ }
82
+ //# sourceMappingURL=wallet-support.js.map