@akin-travel/partner-sdk 1.0.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.
Files changed (204) hide show
  1. package/README.md +1204 -0
  2. package/dist/account/components/AccountInfoSection.d.ts +46 -0
  3. package/dist/account/components/AccountInfoSection.d.ts.map +1 -0
  4. package/dist/account/components/AccountInfoSection.js +52 -0
  5. package/dist/account/components/AccountInfoSection.js.map +1 -0
  6. package/dist/account/components/NotificationPreferencesSection.d.ts +40 -0
  7. package/dist/account/components/NotificationPreferencesSection.d.ts.map +1 -0
  8. package/dist/account/components/NotificationPreferencesSection.js +116 -0
  9. package/dist/account/components/NotificationPreferencesSection.js.map +1 -0
  10. package/dist/account/components/PasskeySection.d.ts +49 -0
  11. package/dist/account/components/PasskeySection.d.ts.map +1 -0
  12. package/dist/account/components/PasskeySection.js +298 -0
  13. package/dist/account/components/PasskeySection.js.map +1 -0
  14. package/dist/account/hooks/useAccountForm.d.ts +23 -0
  15. package/dist/account/hooks/useAccountForm.d.ts.map +1 -0
  16. package/dist/account/hooks/useAccountForm.js +133 -0
  17. package/dist/account/hooks/useAccountForm.js.map +1 -0
  18. package/dist/account/index.d.ts +10 -0
  19. package/dist/account/index.d.ts.map +1 -0
  20. package/dist/account/index.js +21 -0
  21. package/dist/account/index.js.map +1 -0
  22. package/dist/auth/AkinAuthProvider.d.ts +31 -0
  23. package/dist/auth/AkinAuthProvider.d.ts.map +1 -0
  24. package/dist/auth/AkinAuthProvider.js +632 -0
  25. package/dist/auth/AkinAuthProvider.js.map +1 -0
  26. package/dist/auth/components/LoginForm.d.ts +63 -0
  27. package/dist/auth/components/LoginForm.d.ts.map +1 -0
  28. package/dist/auth/components/LoginForm.js +230 -0
  29. package/dist/auth/components/LoginForm.js.map +1 -0
  30. package/dist/auth/components/MagicLinkForm.d.ts +41 -0
  31. package/dist/auth/components/MagicLinkForm.d.ts.map +1 -0
  32. package/dist/auth/components/MagicLinkForm.js +88 -0
  33. package/dist/auth/components/MagicLinkForm.js.map +1 -0
  34. package/dist/auth/components/RequireAuth.d.ts +62 -0
  35. package/dist/auth/components/RequireAuth.d.ts.map +1 -0
  36. package/dist/auth/components/RequireAuth.js +63 -0
  37. package/dist/auth/components/RequireAuth.js.map +1 -0
  38. package/dist/auth/components/RequireGuest.d.ts +60 -0
  39. package/dist/auth/components/RequireGuest.d.ts.map +1 -0
  40. package/dist/auth/components/RequireGuest.js +64 -0
  41. package/dist/auth/components/RequireGuest.js.map +1 -0
  42. package/dist/auth/components/SignupForm.d.ts +45 -0
  43. package/dist/auth/components/SignupForm.d.ts.map +1 -0
  44. package/dist/auth/components/SignupForm.js +167 -0
  45. package/dist/auth/components/SignupForm.js.map +1 -0
  46. package/dist/auth/index.d.ts +10 -0
  47. package/dist/auth/index.d.ts.map +1 -0
  48. package/dist/auth/index.js +21 -0
  49. package/dist/auth/index.js.map +1 -0
  50. package/dist/client.d.ts +17 -0
  51. package/dist/client.d.ts.map +1 -0
  52. package/dist/client.js +136 -0
  53. package/dist/client.js.map +1 -0
  54. package/dist/components/PhoneInput.d.ts +62 -0
  55. package/dist/components/PhoneInput.d.ts.map +1 -0
  56. package/dist/components/PhoneInput.js +65 -0
  57. package/dist/components/PhoneInput.js.map +1 -0
  58. package/dist/components/index.d.ts +2 -0
  59. package/dist/components/index.d.ts.map +1 -0
  60. package/dist/components/index.js +9 -0
  61. package/dist/components/index.js.map +1 -0
  62. package/dist/config.d.ts +111 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +56 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/constants/preferences.d.ts +22 -0
  67. package/dist/constants/preferences.d.ts.map +1 -0
  68. package/dist/constants/preferences.js +52 -0
  69. package/dist/constants/preferences.js.map +1 -0
  70. package/dist/currency/CurrencyProvider.d.ts +46 -0
  71. package/dist/currency/CurrencyProvider.d.ts.map +1 -0
  72. package/dist/currency/CurrencyProvider.js +145 -0
  73. package/dist/currency/CurrencyProvider.js.map +1 -0
  74. package/dist/currency/components/CurrencySelector.d.ts +43 -0
  75. package/dist/currency/components/CurrencySelector.d.ts.map +1 -0
  76. package/dist/currency/components/CurrencySelector.js +58 -0
  77. package/dist/currency/components/CurrencySelector.js.map +1 -0
  78. package/dist/currency/exchangeRates.d.ts +40 -0
  79. package/dist/currency/exchangeRates.d.ts.map +1 -0
  80. package/dist/currency/exchangeRates.js +90 -0
  81. package/dist/currency/exchangeRates.js.map +1 -0
  82. package/dist/currency/index.d.ts +6 -0
  83. package/dist/currency/index.d.ts.map +1 -0
  84. package/dist/currency/index.js +20 -0
  85. package/dist/currency/index.js.map +1 -0
  86. package/dist/header/components/CurrencyAccordion.d.ts +45 -0
  87. package/dist/header/components/CurrencyAccordion.d.ts.map +1 -0
  88. package/dist/header/components/CurrencyAccordion.js +54 -0
  89. package/dist/header/components/CurrencyAccordion.js.map +1 -0
  90. package/dist/header/components/HeaderMenu.d.ts +49 -0
  91. package/dist/header/components/HeaderMenu.d.ts.map +1 -0
  92. package/dist/header/components/HeaderMenu.js +95 -0
  93. package/dist/header/components/HeaderMenu.js.map +1 -0
  94. package/dist/header/components/LanguageAccordion.d.ts +45 -0
  95. package/dist/header/components/LanguageAccordion.d.ts.map +1 -0
  96. package/dist/header/components/LanguageAccordion.js +54 -0
  97. package/dist/header/components/LanguageAccordion.js.map +1 -0
  98. package/dist/header/components/UserAvatar.d.ts +26 -0
  99. package/dist/header/components/UserAvatar.d.ts.map +1 -0
  100. package/dist/header/components/UserAvatar.js +46 -0
  101. package/dist/header/components/UserAvatar.js.map +1 -0
  102. package/dist/header/index.d.ts +10 -0
  103. package/dist/header/index.d.ts.map +1 -0
  104. package/dist/header/index.js +13 -0
  105. package/dist/header/index.js.map +1 -0
  106. package/dist/i18n/I18nProvider.d.ts +57 -0
  107. package/dist/i18n/I18nProvider.d.ts.map +1 -0
  108. package/dist/i18n/I18nProvider.js +205 -0
  109. package/dist/i18n/I18nProvider.js.map +1 -0
  110. package/dist/i18n/components/LanguageSelector.d.ts +43 -0
  111. package/dist/i18n/components/LanguageSelector.d.ts.map +1 -0
  112. package/dist/i18n/components/LanguageSelector.js +57 -0
  113. package/dist/i18n/components/LanguageSelector.js.map +1 -0
  114. package/dist/i18n/index.d.ts +5 -0
  115. package/dist/i18n/index.d.ts.map +1 -0
  116. package/dist/i18n/index.js +14 -0
  117. package/dist/i18n/index.js.map +1 -0
  118. package/dist/i18n/translations/en.json +283 -0
  119. package/dist/i18n/translations/es.json +283 -0
  120. package/dist/index.d.ts +81 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +191 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/loyalty/AkinLoyaltyProvider.d.ts +18 -0
  125. package/dist/loyalty/AkinLoyaltyProvider.d.ts.map +1 -0
  126. package/dist/loyalty/AkinLoyaltyProvider.js +399 -0
  127. package/dist/loyalty/AkinLoyaltyProvider.js.map +1 -0
  128. package/dist/loyalty/components/LoyaltyCard.d.ts +48 -0
  129. package/dist/loyalty/components/LoyaltyCard.d.ts.map +1 -0
  130. package/dist/loyalty/components/LoyaltyCard.js +140 -0
  131. package/dist/loyalty/components/LoyaltyCard.js.map +1 -0
  132. package/dist/loyalty/components/PointsDisplay.d.ts +40 -0
  133. package/dist/loyalty/components/PointsDisplay.d.ts.map +1 -0
  134. package/dist/loyalty/components/PointsDisplay.js +32 -0
  135. package/dist/loyalty/components/PointsDisplay.js.map +1 -0
  136. package/dist/loyalty/components/PreviousStays.d.ts +59 -0
  137. package/dist/loyalty/components/PreviousStays.d.ts.map +1 -0
  138. package/dist/loyalty/components/PreviousStays.js +101 -0
  139. package/dist/loyalty/components/PreviousStays.js.map +1 -0
  140. package/dist/loyalty/components/SimpleTierCards.d.ts +51 -0
  141. package/dist/loyalty/components/SimpleTierCards.d.ts.map +1 -0
  142. package/dist/loyalty/components/SimpleTierCards.js +96 -0
  143. package/dist/loyalty/components/SimpleTierCards.js.map +1 -0
  144. package/dist/loyalty/components/TierCard.d.ts +30 -0
  145. package/dist/loyalty/components/TierCard.d.ts.map +1 -0
  146. package/dist/loyalty/components/TierCard.js +41 -0
  147. package/dist/loyalty/components/TierCard.js.map +1 -0
  148. package/dist/loyalty/components/TierProgress.d.ts +32 -0
  149. package/dist/loyalty/components/TierProgress.d.ts.map +1 -0
  150. package/dist/loyalty/components/TierProgress.js +41 -0
  151. package/dist/loyalty/components/TierProgress.js.map +1 -0
  152. package/dist/loyalty/components/TierRequirementsTable.d.ts +54 -0
  153. package/dist/loyalty/components/TierRequirementsTable.d.ts.map +1 -0
  154. package/dist/loyalty/components/TierRequirementsTable.js +104 -0
  155. package/dist/loyalty/components/TierRequirementsTable.js.map +1 -0
  156. package/dist/loyalty/components/TransactionList.d.ts +44 -0
  157. package/dist/loyalty/components/TransactionList.d.ts.map +1 -0
  158. package/dist/loyalty/components/TransactionList.js +112 -0
  159. package/dist/loyalty/components/TransactionList.js.map +1 -0
  160. package/dist/loyalty/components/UpcomingStays.d.ts +49 -0
  161. package/dist/loyalty/components/UpcomingStays.d.ts.map +1 -0
  162. package/dist/loyalty/components/UpcomingStays.js +60 -0
  163. package/dist/loyalty/components/UpcomingStays.js.map +1 -0
  164. package/dist/loyalty/index.d.ts +12 -0
  165. package/dist/loyalty/index.d.ts.map +1 -0
  166. package/dist/loyalty/index.js +27 -0
  167. package/dist/loyalty/index.js.map +1 -0
  168. package/dist/types/account.d.ts +108 -0
  169. package/dist/types/account.d.ts.map +1 -0
  170. package/dist/types/account.js +3 -0
  171. package/dist/types/account.js.map +1 -0
  172. package/dist/types/auth.d.ts +205 -0
  173. package/dist/types/auth.d.ts.map +1 -0
  174. package/dist/types/auth.js +3 -0
  175. package/dist/types/auth.js.map +1 -0
  176. package/dist/types/currency.d.ts +102 -0
  177. package/dist/types/currency.d.ts.map +1 -0
  178. package/dist/types/currency.js +3 -0
  179. package/dist/types/currency.js.map +1 -0
  180. package/dist/types/header.d.ts +105 -0
  181. package/dist/types/header.d.ts.map +1 -0
  182. package/dist/types/header.js +3 -0
  183. package/dist/types/header.js.map +1 -0
  184. package/dist/types/i18n.d.ts +90 -0
  185. package/dist/types/i18n.d.ts.map +1 -0
  186. package/dist/types/i18n.js +3 -0
  187. package/dist/types/i18n.js.map +1 -0
  188. package/dist/types/index.d.ts +3 -0
  189. package/dist/types/index.d.ts.map +1 -0
  190. package/dist/types/index.js +3 -0
  191. package/dist/types/index.js.map +1 -0
  192. package/dist/types/loyalty.d.ts +312 -0
  193. package/dist/types/loyalty.d.ts.map +1 -0
  194. package/dist/types/loyalty.js +3 -0
  195. package/dist/types/loyalty.js.map +1 -0
  196. package/dist/utils/index.d.ts +2 -0
  197. package/dist/utils/index.d.ts.map +1 -0
  198. package/dist/utils/index.js +10 -0
  199. package/dist/utils/index.js.map +1 -0
  200. package/dist/utils/tierLabels.d.ts +27 -0
  201. package/dist/utils/tierLabels.d.ts.map +1 -0
  202. package/dist/utils/tierLabels.js +110 -0
  203. package/dist/utils/tierLabels.js.map +1 -0
  204. package/package.json +60 -0
@@ -0,0 +1,632 @@
1
+ "use strict";
2
+ 'use client';
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.useSDK = useSDK;
38
+ exports.useAkinAuth = useAkinAuth;
39
+ exports.AkinProvider = AkinProvider;
40
+ const jsx_runtime_1 = require("react/jsx-runtime");
41
+ const react_1 = require("react");
42
+ const client_1 = require("@apollo/client");
43
+ const app_1 = require("firebase/app");
44
+ const auth_1 = require("firebase/auth");
45
+ const config_1 = require("../config");
46
+ const client_2 = require("../client");
47
+ const AkinLoyaltyProvider_1 = require("../loyalty/AkinLoyaltyProvider");
48
+ const I18nProvider_1 = require("../i18n/I18nProvider");
49
+ const CurrencyProvider_1 = require("../currency/CurrencyProvider");
50
+ // GraphQL Mutations
51
+ const LOGIN_MEMBER_GIP = (0, client_2.gql) `
52
+ mutation LoginMemberGIP($input: LoginMemberGIPInput!) {
53
+ loginMemberGIP(input: $input) {
54
+ user {
55
+ id
56
+ email
57
+ firstName
58
+ lastName
59
+ emailVerified
60
+ }
61
+ memberData {
62
+ id
63
+ firstName
64
+ lastName
65
+ email
66
+ phone
67
+ countryCode
68
+ spendableNetworkPoints
69
+ unspendableNetworkPoints
70
+ tierAtPartner
71
+ tierDisplayName
72
+ status
73
+ vibePreference
74
+ perkPreferences
75
+ placeTypePreferences
76
+ loyaltyNumber
77
+ marketingOptIn
78
+ createdAt
79
+ updatedAt
80
+ }
81
+ }
82
+ }
83
+ `;
84
+ const SIGN_UP_PASSWORDLESS = (0, client_2.gql) `
85
+ mutation SignUpPasswordless($input: SignUpPasswordlessInput!) {
86
+ signUpPasswordless(input: $input) {
87
+ success
88
+ userId
89
+ email
90
+ error
91
+ }
92
+ }
93
+ `;
94
+ const REQUEST_MAGIC_LINK = (0, client_2.gql) `
95
+ mutation RequestMagicLink($email: String!, $userType: String!, $partnerId: ID) {
96
+ requestMagicLink(email: $email, userType: $userType, partnerId: $partnerId) {
97
+ success
98
+ error
99
+ }
100
+ }
101
+ `;
102
+ const VERIFY_AUTH_TOKEN = (0, client_2.gql) `
103
+ mutation VerifyAuthToken($token: String!) {
104
+ verifyAuthToken(token: $token) {
105
+ success
106
+ customToken
107
+ userId
108
+ isNewUser
109
+ error
110
+ memberData {
111
+ id
112
+ firstName
113
+ lastName
114
+ email
115
+ phone
116
+ countryCode
117
+ spendableNetworkPoints
118
+ unspendableNetworkPoints
119
+ tierAtPartner
120
+ tierDisplayName
121
+ status
122
+ loyaltyNumber
123
+ marketingOptIn
124
+ createdAt
125
+ updatedAt
126
+ }
127
+ }
128
+ }
129
+ `;
130
+ const PASSKEY_AUTHENTICATION_OPTIONS = (0, client_2.gql) `
131
+ mutation PasskeyAuthenticationOptions($userId: String, $tenantId: String, $userType: String) {
132
+ passkeyAuthenticationOptions(userId: $userId, tenantId: $tenantId, userType: $userType)
133
+ }
134
+ `;
135
+ const PASSKEY_AUTHENTICATE = (0, client_2.gql) `
136
+ mutation PasskeyAuthenticate($authenticationResponse: JSONObject!, $expectedChallenge: String!) {
137
+ passkeyAuthenticate(authenticationResponse: $authenticationResponse, expectedChallenge: $expectedChallenge) {
138
+ customToken
139
+ tenantId
140
+ }
141
+ }
142
+ `;
143
+ // Helper to dynamically import browser-only WebAuthn functions
144
+ async function importWebAuthnBrowser() {
145
+ if (typeof window === 'undefined') {
146
+ throw new Error('WebAuthn is only available in the browser');
147
+ }
148
+ return await Promise.resolve().then(() => __importStar(require('@simplewebauthn/browser')));
149
+ }
150
+ // Check for WebAuthn support
151
+ function isPasskeySupported() {
152
+ if (typeof window === 'undefined')
153
+ return false;
154
+ return window?.PublicKeyCredential !== undefined && typeof window.PublicKeyCredential === 'function';
155
+ }
156
+ // Firebase error code to user-friendly message mapping
157
+ const FIREBASE_ERROR_MESSAGES = {
158
+ 'auth/invalid-email': 'Please enter a valid email address.',
159
+ 'auth/user-disabled': 'This account has been disabled. Please contact support.',
160
+ 'auth/user-not-found': 'No account found with this email address.',
161
+ 'auth/wrong-password': 'Incorrect password. Please try again.',
162
+ 'auth/email-already-in-use': 'An account with this email already exists.',
163
+ 'auth/weak-password': 'Password is too weak. Please use at least 6 characters.',
164
+ 'auth/operation-not-allowed': 'This sign-in method is not enabled.',
165
+ 'auth/too-many-requests': 'Too many failed attempts. Please try again later.',
166
+ 'auth/network-request-failed': 'Network error. Please check your connection.',
167
+ 'auth/popup-closed-by-user': 'Sign-in was cancelled.',
168
+ 'auth/cancelled-popup-request': 'Sign-in was cancelled.',
169
+ 'auth/popup-blocked': 'Pop-up was blocked. Please allow pop-ups for this site.',
170
+ 'auth/invalid-credential': 'Invalid credentials. Please try again.',
171
+ 'auth/invalid-verification-code': 'Invalid verification code.',
172
+ 'auth/invalid-verification-id': 'Invalid verification. Please request a new link.',
173
+ 'auth/code-expired': 'Verification code has expired. Please request a new one.',
174
+ 'auth/credential-already-in-use': 'This credential is already associated with another account.',
175
+ 'auth/requires-recent-login': 'Please sign in again to complete this action.',
176
+ 'auth/api-key-not-valid.-please-pass-a-valid-api-key.': 'Authentication service configuration error. Please contact support.',
177
+ 'auth/requests-from-referer-blocked': 'This domain is not authorized for authentication.',
178
+ 'auth/invalid-custom-token': 'Authentication failed. Please try again.',
179
+ 'auth/custom-token-mismatch': 'Authentication failed. Please try again.',
180
+ };
181
+ // Extract Firebase error code and convert to user-friendly message
182
+ function getReadableErrorMessage(error) {
183
+ if (!(error instanceof Error)) {
184
+ return 'An unexpected error occurred. Please try again.';
185
+ }
186
+ const message = error.message;
187
+ // Check for Firebase error format: "Firebase: Error (auth/error-code)."
188
+ const firebaseMatch = message.match(/Firebase: Error \((auth\/[^)]+)\)/);
189
+ if (firebaseMatch) {
190
+ const errorCode = firebaseMatch[1];
191
+ return FIREBASE_ERROR_MESSAGES[errorCode] || `Authentication error: ${errorCode.replace('auth/', '').replace(/-/g, ' ')}`;
192
+ }
193
+ // Check for referer blocked error (different format)
194
+ if (message.includes('requests-from-referer') && message.includes('are-blocked')) {
195
+ return 'This domain is not authorized for authentication. Please contact support.';
196
+ }
197
+ // Check for WebAuthn/Passkey errors
198
+ if (message.includes('RP ID') && message.includes('invalid')) {
199
+ return 'Passkey authentication is not available for this domain.';
200
+ }
201
+ // Check for GraphQL errors
202
+ if (message.includes('GraphQL')) {
203
+ return 'Server error. Please try again later.';
204
+ }
205
+ // Return original message if no mapping found (might already be user-friendly)
206
+ return message;
207
+ }
208
+ const AuthContext = (0, react_1.createContext)(undefined);
209
+ const SDKContext = (0, react_1.createContext)(undefined);
210
+ /**
211
+ * Hook to access SDK configuration and Firebase instances
212
+ */
213
+ function useSDK() {
214
+ const context = (0, react_1.useContext)(SDKContext);
215
+ if (!context) {
216
+ throw new Error('useSDK must be used within an AkinProvider');
217
+ }
218
+ return context;
219
+ }
220
+ /**
221
+ * Hook to access auth state and actions
222
+ */
223
+ function useAkinAuth() {
224
+ const context = (0, react_1.useContext)(AuthContext);
225
+ if (!context) {
226
+ throw new Error('useAkinAuth must be used within an AkinProvider');
227
+ }
228
+ return context;
229
+ }
230
+ // Helper to convert Firebase user to AkinUser
231
+ function toAkinUser(firebaseUser) {
232
+ return {
233
+ id: firebaseUser.uid,
234
+ email: firebaseUser.email || '',
235
+ displayName: firebaseUser.displayName || undefined,
236
+ emailVerified: firebaseUser.emailVerified,
237
+ photoURL: firebaseUser.photoURL || undefined,
238
+ };
239
+ }
240
+ /**
241
+ * Main provider for the Akin Partner SDK
242
+ * Wraps your app to provide auth and loyalty functionality
243
+ */
244
+ function AkinProvider({ config: userConfig, children }) {
245
+ const resolvedConfig = (0, react_1.useMemo)(() => (0, config_1.resolveConfig)(userConfig), [userConfig]);
246
+ // Initialize Firebase
247
+ const { firebaseApp, auth } = (0, react_1.useMemo)(() => {
248
+ const existingApp = (0, app_1.getApps)().find((app) => app.name === 'akin-partner-sdk');
249
+ const app = existingApp ||
250
+ (0, app_1.initializeApp)({
251
+ apiKey: resolvedConfig.firebase.apiKey,
252
+ authDomain: resolvedConfig.firebase.authDomain,
253
+ projectId: resolvedConfig.firebase.projectId,
254
+ appId: resolvedConfig.firebase.appId,
255
+ }, 'akin-partner-sdk');
256
+ const authInstance = (0, auth_1.getAuth)(app);
257
+ // Set tenant for multi-tenancy
258
+ authInstance.tenantId = resolvedConfig.gipTenantId;
259
+ return { firebaseApp: app, auth: authInstance };
260
+ }, [resolvedConfig]);
261
+ // Create Apollo client
262
+ const apolloClient = (0, react_1.useMemo)(() => (0, client_2.createAkinClient)(userConfig), [userConfig]);
263
+ // Auth state
264
+ const [firebaseUser, setFirebaseUser] = (0, react_1.useState)(null);
265
+ const [user, setUser] = (0, react_1.useState)(null);
266
+ const [member, setMember] = (0, react_1.useState)(null);
267
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
268
+ const [error, setError] = (0, react_1.useState)(null);
269
+ // Refs for deduplication
270
+ const lastSyncedUidRef = (0, react_1.useRef)(null);
271
+ const isInitializedRef = (0, react_1.useRef)(false);
272
+ // Set up token provider for Apollo client
273
+ (0, react_1.useEffect)(() => {
274
+ (0, client_2.setTokenProvider)(async () => {
275
+ if (!firebaseUser)
276
+ return null;
277
+ try {
278
+ return await firebaseUser.getIdToken();
279
+ }
280
+ catch {
281
+ return null;
282
+ }
283
+ });
284
+ }, [firebaseUser]);
285
+ // Sync member data from API
286
+ const syncMemberData = (0, react_1.useCallback)(async (fbUser) => {
287
+ if (lastSyncedUidRef.current === fbUser.uid)
288
+ return;
289
+ lastSyncedUidRef.current = fbUser.uid;
290
+ try {
291
+ const idToken = await fbUser.getIdToken();
292
+ const { data } = await apolloClient.mutate({
293
+ mutation: LOGIN_MEMBER_GIP,
294
+ variables: {
295
+ input: {
296
+ idToken,
297
+ partnerId: resolvedConfig.partnerId,
298
+ },
299
+ },
300
+ });
301
+ if (data?.loginMemberGIP?.memberData) {
302
+ const memberData = data.loginMemberGIP.memberData;
303
+ setMember({
304
+ ...memberData,
305
+ createdAt: new Date(memberData.createdAt),
306
+ updatedAt: new Date(memberData.updatedAt),
307
+ });
308
+ }
309
+ }
310
+ catch (err) {
311
+ if (resolvedConfig.debug) {
312
+ console.error('[Akin SDK] Error syncing member data:', err);
313
+ }
314
+ setError('Failed to load member data');
315
+ }
316
+ }, [apolloClient, resolvedConfig]);
317
+ // Listen for auth state changes
318
+ (0, react_1.useEffect)(() => {
319
+ const unsubscribe = (0, auth_1.onAuthStateChanged)(auth, async (fbUser) => {
320
+ setFirebaseUser(fbUser);
321
+ if (fbUser) {
322
+ setUser(toAkinUser(fbUser));
323
+ await syncMemberData(fbUser);
324
+ }
325
+ else {
326
+ setUser(null);
327
+ setMember(null);
328
+ lastSyncedUidRef.current = null;
329
+ (0, client_2.clearTokenCache)();
330
+ }
331
+ if (!isInitializedRef.current) {
332
+ isInitializedRef.current = true;
333
+ setIsLoading(false);
334
+ }
335
+ });
336
+ // Set a timeout for initialization
337
+ const timeout = setTimeout(() => {
338
+ if (!isInitializedRef.current) {
339
+ isInitializedRef.current = true;
340
+ setIsLoading(false);
341
+ }
342
+ }, 10000);
343
+ return () => {
344
+ unsubscribe();
345
+ clearTimeout(timeout);
346
+ };
347
+ }, [auth, syncMemberData]);
348
+ // Auth actions
349
+ const signIn = (0, react_1.useCallback)(async (email, password) => {
350
+ setError(null);
351
+ setIsLoading(true);
352
+ try {
353
+ await (0, auth_1.setPersistence)(auth, auth_1.browserLocalPersistence);
354
+ await (0, auth_1.signInWithEmailAndPassword)(auth, email, password);
355
+ }
356
+ catch (err) {
357
+ const message = getReadableErrorMessage(err);
358
+ setError(message);
359
+ throw err;
360
+ }
361
+ finally {
362
+ setIsLoading(false);
363
+ }
364
+ }, [auth]);
365
+ const signUp = (0, react_1.useCallback)(async (data) => {
366
+ setError(null);
367
+ setIsLoading(true);
368
+ try {
369
+ await (0, auth_1.setPersistence)(auth, auth_1.browserLocalPersistence);
370
+ const credential = await (0, auth_1.createUserWithEmailAndPassword)(auth, data.email, data.password);
371
+ // Update display name
372
+ await (0, auth_1.updateProfile)(credential.user, {
373
+ displayName: `${data.firstName} ${data.lastName}`,
374
+ });
375
+ // Sync will happen via onAuthStateChanged
376
+ }
377
+ catch (err) {
378
+ const message = getReadableErrorMessage(err);
379
+ setError(message);
380
+ throw err;
381
+ }
382
+ finally {
383
+ setIsLoading(false);
384
+ }
385
+ }, [auth]);
386
+ const signUpPasswordless = (0, react_1.useCallback)(async (data) => {
387
+ setError(null);
388
+ try {
389
+ const { data: result } = await apolloClient.mutate({
390
+ mutation: SIGN_UP_PASSWORDLESS,
391
+ variables: {
392
+ input: {
393
+ firstName: data.firstName,
394
+ lastName: data.lastName,
395
+ email: data.email,
396
+ phone: data.phone,
397
+ countryCode: data.countryCode,
398
+ partnerId: resolvedConfig.partnerId,
399
+ termsAccepted: data.termsAccepted,
400
+ marketingOptIn: data.marketingOptIn,
401
+ },
402
+ },
403
+ });
404
+ if (result?.signUpPasswordless?.success) {
405
+ return { success: true };
406
+ }
407
+ const errorMsg = result?.signUpPasswordless?.error || 'Passwordless signup failed';
408
+ setError(errorMsg);
409
+ return { success: false, error: errorMsg };
410
+ }
411
+ catch (err) {
412
+ const message = getReadableErrorMessage(err);
413
+ setError(message);
414
+ return { success: false, error: message };
415
+ }
416
+ }, [apolloClient, resolvedConfig.partnerId]);
417
+ const requestMagicLink = (0, react_1.useCallback)(async (email) => {
418
+ setError(null);
419
+ try {
420
+ const { data: result } = await apolloClient.mutate({
421
+ mutation: REQUEST_MAGIC_LINK,
422
+ variables: {
423
+ email,
424
+ userType: 'member',
425
+ partnerId: resolvedConfig.partnerId,
426
+ },
427
+ });
428
+ if (result?.requestMagicLink?.success) {
429
+ return { success: true };
430
+ }
431
+ const errorMsg = result?.requestMagicLink?.error || 'Failed to send magic link';
432
+ setError(errorMsg);
433
+ return { success: false, error: errorMsg };
434
+ }
435
+ catch (err) {
436
+ const message = getReadableErrorMessage(err);
437
+ setError(message);
438
+ return { success: false, error: message };
439
+ }
440
+ }, [apolloClient, resolvedConfig.partnerId]);
441
+ const verifyMagicLink = (0, react_1.useCallback)(async (token) => {
442
+ setError(null);
443
+ setIsLoading(true);
444
+ try {
445
+ const { data: result } = await apolloClient.mutate({
446
+ mutation: VERIFY_AUTH_TOKEN,
447
+ variables: { token },
448
+ });
449
+ if (!result?.verifyAuthToken?.success) {
450
+ const errorMsg = result?.verifyAuthToken?.error || 'Verification failed. Please request a new link.';
451
+ setError(errorMsg);
452
+ setIsLoading(false);
453
+ return { success: false, error: errorMsg };
454
+ }
455
+ // Sign in with the custom token
456
+ if (result.verifyAuthToken.customToken) {
457
+ await (0, auth_1.signInWithCustomToken)(auth, result.verifyAuthToken.customToken);
458
+ }
459
+ // Set member data if provided
460
+ if (result.verifyAuthToken.memberData) {
461
+ const memberData = result.verifyAuthToken.memberData;
462
+ setMember({
463
+ ...memberData,
464
+ createdAt: new Date(memberData.createdAt),
465
+ updatedAt: new Date(memberData.updatedAt),
466
+ });
467
+ }
468
+ setIsLoading(false);
469
+ return {
470
+ success: true,
471
+ isNewUser: result.verifyAuthToken.isNewUser,
472
+ };
473
+ }
474
+ catch (err) {
475
+ const message = getReadableErrorMessage(err);
476
+ setError(message);
477
+ setIsLoading(false);
478
+ return { success: false, error: message };
479
+ }
480
+ }, [apolloClient, auth]);
481
+ const signInWithGoogle = (0, react_1.useCallback)(async () => {
482
+ setError(null);
483
+ setIsLoading(true);
484
+ try {
485
+ const provider = new auth_1.GoogleAuthProvider();
486
+ await (0, auth_1.signInWithPopup)(auth, provider);
487
+ }
488
+ catch (err) {
489
+ const message = getReadableErrorMessage(err);
490
+ setError(message);
491
+ throw err;
492
+ }
493
+ finally {
494
+ setIsLoading(false);
495
+ }
496
+ }, [auth]);
497
+ const signInWithPasskey = (0, react_1.useCallback)(async () => {
498
+ if (!isPasskeySupported()) {
499
+ const message = 'Passkeys are not supported in this browser.';
500
+ setError(message);
501
+ throw new Error(message);
502
+ }
503
+ setError(null);
504
+ setIsLoading(true);
505
+ try {
506
+ // Step 1: Get authentication options from server
507
+ // Pass userType to scope credential discovery to MEMBER passkeys only
508
+ const { data: optionsData } = await apolloClient.mutate({
509
+ mutation: PASSKEY_AUTHENTICATION_OPTIONS,
510
+ variables: { userType: 'MEMBER' },
511
+ });
512
+ if (!optionsData?.passkeyAuthenticationOptions) {
513
+ throw new Error('No passkeys registered. Please sign in with email first, then register a passkey.');
514
+ }
515
+ const options = optionsData.passkeyAuthenticationOptions;
516
+ // Step 2: Start WebAuthn authentication (browser prompts user)
517
+ const { startAuthentication } = await importWebAuthnBrowser();
518
+ const authenticationResponse = await startAuthentication({ optionsJSON: options });
519
+ // Step 3: Verify authentication on server and get custom token
520
+ const { data: authData } = await apolloClient.mutate({
521
+ mutation: PASSKEY_AUTHENTICATE,
522
+ variables: {
523
+ authenticationResponse,
524
+ expectedChallenge: options.challenge,
525
+ },
526
+ });
527
+ if (!authData?.passkeyAuthenticate) {
528
+ throw new Error('Passkey verification failed. Please try again.');
529
+ }
530
+ const { customToken, tenantId: credentialTenantId } = authData.passkeyAuthenticate;
531
+ // Step 4: Update Firebase tenant if different from config
532
+ if (credentialTenantId && auth.tenantId !== credentialTenantId) {
533
+ auth.tenantId = credentialTenantId;
534
+ }
535
+ // Step 5: Sign in with the custom token
536
+ await (0, auth_1.signInWithCustomToken)(auth, customToken);
537
+ // Success - loading will be reset in finally block
538
+ }
539
+ catch (err) {
540
+ const error = err;
541
+ // User cancelled the passkey prompt - not an error
542
+ if (error.name === 'NotAllowedError') {
543
+ setIsLoading(false);
544
+ return;
545
+ }
546
+ const message = getReadableErrorMessage(err);
547
+ setError(message);
548
+ throw error;
549
+ }
550
+ finally {
551
+ setIsLoading(false);
552
+ }
553
+ }, [apolloClient, auth]);
554
+ const signOut = (0, react_1.useCallback)(async () => {
555
+ try {
556
+ await (0, auth_1.signOut)(auth);
557
+ setUser(null);
558
+ setMember(null);
559
+ (0, client_2.clearTokenCache)();
560
+ apolloClient.clearStore();
561
+ }
562
+ catch (err) {
563
+ const message = getReadableErrorMessage(err);
564
+ setError(message);
565
+ throw err;
566
+ }
567
+ }, [auth, apolloClient]);
568
+ const resetPassword = (0, react_1.useCallback)(async (email) => {
569
+ setError(null);
570
+ try {
571
+ await (0, auth_1.sendPasswordResetEmail)(auth, email);
572
+ }
573
+ catch (err) {
574
+ const message = getReadableErrorMessage(err);
575
+ setError(message);
576
+ throw err;
577
+ }
578
+ }, [auth]);
579
+ const refreshMemberData = (0, react_1.useCallback)(async () => {
580
+ if (firebaseUser) {
581
+ lastSyncedUidRef.current = null; // Force re-sync
582
+ await syncMemberData(firebaseUser);
583
+ }
584
+ }, [firebaseUser, syncMemberData]);
585
+ const clearError = (0, react_1.useCallback)(() => {
586
+ setError(null);
587
+ }, []);
588
+ // Build context value
589
+ const authValue = (0, react_1.useMemo)(() => ({
590
+ // State
591
+ user,
592
+ member,
593
+ isAuthenticated: !!user,
594
+ isLoading,
595
+ error,
596
+ // Actions
597
+ signIn,
598
+ signUp,
599
+ signUpPasswordless,
600
+ requestMagicLink,
601
+ verifyMagicLink,
602
+ signInWithGoogle,
603
+ signInWithPasskey,
604
+ signOut,
605
+ resetPassword,
606
+ refreshMemberData,
607
+ clearError,
608
+ }), [
609
+ user,
610
+ member,
611
+ isLoading,
612
+ error,
613
+ signIn,
614
+ signUp,
615
+ signUpPasswordless,
616
+ requestMagicLink,
617
+ verifyMagicLink,
618
+ signInWithGoogle,
619
+ signInWithPasskey,
620
+ signOut,
621
+ resetPassword,
622
+ refreshMemberData,
623
+ clearError,
624
+ ]);
625
+ const sdkValue = (0, react_1.useMemo)(() => ({
626
+ config: resolvedConfig,
627
+ firebaseApp,
628
+ auth,
629
+ }), [resolvedConfig, firebaseApp, auth]);
630
+ return ((0, jsx_runtime_1.jsx)(SDKContext.Provider, { value: sdkValue, children: (0, jsx_runtime_1.jsx)(client_1.ApolloProvider, { client: apolloClient, children: (0, jsx_runtime_1.jsx)(I18nProvider_1.I18nProvider, { config: resolvedConfig.i18n, children: (0, jsx_runtime_1.jsx)(CurrencyProvider_1.CurrencyProvider, { config: resolvedConfig.currency, children: (0, jsx_runtime_1.jsx)(AuthContext.Provider, { value: authValue, children: (0, jsx_runtime_1.jsx)(AkinLoyaltyProvider_1.AkinLoyaltyProvider, { children: children }) }) }) }) }) }));
631
+ }
632
+ //# sourceMappingURL=AkinAuthProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AkinAuthProvider.js","sourceRoot":"","sources":["../../src/auth/AkinAuthProvider.tsx"],"names":[],"mappings":"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"}