@xbg.solutions/bpsk-utils-firebase-auth 1.2.3

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 (61) hide show
  1. package/lib/index.d.ts +13 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +20 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/services/auth/auth.service.d.ts +89 -0
  6. package/lib/services/auth/auth.service.d.ts.map +1 -0
  7. package/lib/services/auth/auth.service.js +615 -0
  8. package/lib/services/auth/auth.service.js.map +1 -0
  9. package/lib/services/auth/email-link.d.ts +99 -0
  10. package/lib/services/auth/email-link.d.ts.map +1 -0
  11. package/lib/services/auth/email-link.js +715 -0
  12. package/lib/services/auth/email-link.js.map +1 -0
  13. package/lib/services/auth/index.d.ts +15 -0
  14. package/lib/services/auth/index.d.ts.map +1 -0
  15. package/lib/services/auth/index.js +18 -0
  16. package/lib/services/auth/index.js.map +1 -0
  17. package/lib/services/auth/phone-auth.d.ts +65 -0
  18. package/lib/services/auth/phone-auth.d.ts.map +1 -0
  19. package/lib/services/auth/phone-auth.js +150 -0
  20. package/lib/services/auth/phone-auth.js.map +1 -0
  21. package/lib/services/auth/user-creation.d.ts +17 -0
  22. package/lib/services/auth/user-creation.d.ts.map +1 -0
  23. package/lib/services/auth/user-creation.js +39 -0
  24. package/lib/services/auth/user-creation.js.map +1 -0
  25. package/lib/services/token/index.d.ts +29 -0
  26. package/lib/services/token/index.d.ts.map +1 -0
  27. package/lib/services/token/index.js +20 -0
  28. package/lib/services/token/index.js.map +1 -0
  29. package/lib/services/token/token.service.d.ts +57 -0
  30. package/lib/services/token/token.service.d.ts.map +1 -0
  31. package/lib/services/token/token.service.js +554 -0
  32. package/lib/services/token/token.service.js.map +1 -0
  33. package/lib/stores/auth.service.d.ts +6 -0
  34. package/lib/stores/auth.service.d.ts.map +1 -0
  35. package/lib/stores/auth.service.js +6 -0
  36. package/lib/stores/auth.service.js.map +1 -0
  37. package/lib/stores/auth.store.d.ts +56 -0
  38. package/lib/stores/auth.store.d.ts.map +1 -0
  39. package/lib/stores/auth.store.js +64 -0
  40. package/lib/stores/auth.store.js.map +1 -0
  41. package/lib/stores/token.store.d.ts +41 -0
  42. package/lib/stores/token.store.d.ts.map +1 -0
  43. package/lib/stores/token.store.js +36 -0
  44. package/lib/stores/token.store.js.map +1 -0
  45. package/lib/stores/user-creation.d.ts +8 -0
  46. package/lib/stores/user-creation.d.ts.map +1 -0
  47. package/lib/stores/user-creation.js +11 -0
  48. package/lib/stores/user-creation.js.map +1 -0
  49. package/lib/utils/auth-guard.d.ts +58 -0
  50. package/lib/utils/auth-guard.d.ts.map +1 -0
  51. package/lib/utils/auth-guard.js +109 -0
  52. package/lib/utils/auth-guard.js.map +1 -0
  53. package/lib/utils/signout.d.ts +82 -0
  54. package/lib/utils/signout.d.ts.map +1 -0
  55. package/lib/utils/signout.js +168 -0
  56. package/lib/utils/signout.js.map +1 -0
  57. package/lib/utils/tokens.d.ts +136 -0
  58. package/lib/utils/tokens.d.ts.map +1 -0
  59. package/lib/utils/tokens.js +479 -0
  60. package/lib/utils/tokens.js.map +1 -0
  61. package/package.json +31 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * src/lib/utils/tokens.ts
3
+ * Token Utilities
4
+ *
5
+ * Utilities for working with JWT tokens, including:
6
+ * - Decoding and parsing tokens
7
+ * - Extracting claims and roles
8
+ * - Token validation and expiration checking
9
+ * - Token storage and retrieval
10
+ *
11
+ * NOTE: The key improvements here are in the extractClaims function,
12
+ * which now properly handles Firebase's JWT format and ensures
13
+ * boolean values are correctly interpreted.
14
+ */
15
+ import { AppError } from '@xbg.solutions/bpsk-core';
16
+ import type { DecodedToken, TokenOptions, TokenRole, FirebaseUserClaims } from '@xbg.solutions/bpsk-core';
17
+ /**
18
+ * Token-related error class
19
+ */
20
+ export declare class TokenError extends AppError {
21
+ token?: string;
22
+ constructor(message: string, options?: any);
23
+ }
24
+ /**
25
+ * Decodes a JWT token without verifying its signature
26
+ * @param token JWT token string or previously decoded token
27
+ * @returns Decoded token payload
28
+ */
29
+ export declare function decodeToken(token: string | DecodedToken): DecodedToken;
30
+ /**
31
+ * Extracts user claims from a token
32
+ * @param token JWT token string or previously decoded token
33
+ * @returns User claims object
34
+ */
35
+ export declare function extractClaims(token: string | DecodedToken): FirebaseUserClaims;
36
+ /**
37
+ * Gets user roles from claims
38
+ * @param claims User claims or token
39
+ * @returns Array of user roles
40
+ */
41
+ export declare function getUserRoles(claims: FirebaseUserClaims | string | DecodedToken): TokenRole[];
42
+ /**
43
+ * Checks if claims or token includes a specific role
44
+ * @param claims User claims or token
45
+ * @param role Role to check for
46
+ * @returns True if user has the specified role
47
+ */
48
+ export declare function hasRole(claims: FirebaseUserClaims | string | DecodedToken | null, role: string): boolean;
49
+ /**
50
+ * Checks if claims or token includes any of the specified roles
51
+ * @param claims User claims or token
52
+ * @param roles Roles to check for
53
+ * @returns True if user has any of the specified roles
54
+ */
55
+ export declare function hasAnyRole(claims: FirebaseUserClaims | string | DecodedToken | null, roles: string[]): boolean;
56
+ /**
57
+ * Checks if a token is expired
58
+ * @param token Token string or decoded token
59
+ * @param options Options for expiration check
60
+ * @returns True if token is expired or invalid
61
+ */
62
+ export declare function isTokenExpired(token: string | DecodedToken | null, options?: {
63
+ bufferSeconds?: number;
64
+ }): boolean;
65
+ /**
66
+ * Validates a token
67
+ * @param token Token string
68
+ * @returns True if token is valid and not expired
69
+ */
70
+ export declare function isTokenValid(token: string | null): boolean;
71
+ /**
72
+ * Stores a token securely
73
+ * @param token Token to store
74
+ * @param options Storage options
75
+ * @returns True if successful
76
+ */
77
+ export declare function storeToken(token: string, options?: TokenOptions): boolean;
78
+ /**
79
+ * Retrieves a token from storage
80
+ * @param options Retrieval options
81
+ * @returns The token or null if not found
82
+ */
83
+ export declare function retrieveToken(options?: Omit<TokenOptions, 'ttl'>): string | null;
84
+ /**
85
+ * Clears all tokens from storage
86
+ * @returns True if successful
87
+ */
88
+ export declare function clearTokens(): boolean;
89
+ /**
90
+ * Gets a fresh ID token from Firebase Auth
91
+ * @param options Options for token refresh
92
+ * @returns Promise resolving to ID token
93
+ */
94
+ export declare function getIdToken(options?: {
95
+ forceRefresh?: boolean;
96
+ }): Promise<string>;
97
+ /**
98
+ * Checks if two tokens are different
99
+ * @param oldToken First token
100
+ * @param newToken Second token
101
+ * @returns True if tokens are different
102
+ */
103
+ export declare function haveTokensChanged(oldToken: string | null, newToken: string | null): boolean;
104
+ /**
105
+ * Safe version of decodeToken that does not throw
106
+ * @param token JWT token string
107
+ * @returns Result object with success status and data/error
108
+ */
109
+ export declare function safeDecodeToken(token: string): Promise<{
110
+ success: boolean;
111
+ data?: DecodedToken;
112
+ error?: Error;
113
+ }>;
114
+ /**
115
+ * Safe version of extractClaims that does not throw
116
+ * @param token JWT token string or decoded token
117
+ * @returns Result object with success status and data/error
118
+ */
119
+ export declare function safeExtractClaims(token: string | DecodedToken): Promise<{
120
+ success: boolean;
121
+ data?: FirebaseUserClaims;
122
+ error?: Error;
123
+ }>;
124
+ /**
125
+ * Safe version of getIdToken that does not throw
126
+ * @param options Options for token refresh
127
+ * @returns Result object with success status and data/error
128
+ */
129
+ export declare function safeGetIdToken(options?: {
130
+ forceRefresh?: boolean;
131
+ }): Promise<{
132
+ success: boolean;
133
+ data?: string;
134
+ error?: Error;
135
+ }>;
136
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAiB,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAInE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAA+C,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKvJ;;GAEG;AACH,qBAAa,UAAW,SAAQ,QAAQ;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ;CAW/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,CA6BtE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,kBAAkB,CAqF9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,EAAE,CA+C5F;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgCxG;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAM9G;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,EACnC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,OAAO,CA2BT;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAqB1D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAoB7E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAM,GAAG,MAAM,GAAG,IAAI,CAkBpF;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAWrC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CA8B3F;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC,CAaD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC,CAaD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC;IACtF,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC,CAaD"}
@@ -0,0 +1,479 @@
1
+ /**
2
+ * src/lib/utils/tokens.ts
3
+ * Token Utilities
4
+ *
5
+ * Utilities for working with JWT tokens, including:
6
+ * - Decoding and parsing tokens
7
+ * - Extracting claims and roles
8
+ * - Token validation and expiration checking
9
+ * - Token storage and retrieval
10
+ *
11
+ * NOTE: The key improvements here are in the extractClaims function,
12
+ * which now properly handles Firebase's JWT format and ensures
13
+ * boolean values are correctly interpreted.
14
+ */
15
+ import { loggerService, AppError } from '@xbg.solutions/bpsk-core';
16
+ import { secureStorage } from '@xbg.solutions/bpsk-utils-secure-storage';
17
+ import { AUTH_NAMESPACE, AUTH_TOKEN_TTL } from '@xbg.solutions/bpsk-utils-secure-storage';
18
+ import { getAuth } from 'firebase/auth';
19
+ // Create a context-aware logger
20
+ const logger = loggerService.withContext('TokenUtils');
21
+ /**
22
+ * Token-related error class
23
+ */
24
+ export class TokenError extends AppError {
25
+ constructor(message, options = {}) {
26
+ super(message, {
27
+ category: 'token',
28
+ ...options
29
+ });
30
+ if (options.token) {
31
+ // Store only the first few characters of the token for debugging
32
+ this.token = options.token.substring(0, 10) + '...';
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * Decodes a JWT token without verifying its signature
38
+ * @param token JWT token string or previously decoded token
39
+ * @returns Decoded token payload
40
+ */
41
+ export function decodeToken(token) {
42
+ // If already decoded, return as is
43
+ if (typeof token !== 'string') {
44
+ return token;
45
+ }
46
+ try {
47
+ // Split the JWT into parts
48
+ const parts = token.split('.');
49
+ if (parts.length !== 3) {
50
+ throw new TokenError('Invalid token format', { token });
51
+ }
52
+ // Decode the payload (second part)
53
+ const payload = parts[1];
54
+ const decoded = JSON.parse(atob(payload.replace(/-/g, '+').replace(/_/g, '/')));
55
+ return decoded;
56
+ }
57
+ catch (error) {
58
+ if (error instanceof TokenError) {
59
+ throw error;
60
+ }
61
+ throw new TokenError(`Failed to decode token: ${error instanceof Error ? error.message : String(error)}`, { token, originalError: error });
62
+ }
63
+ }
64
+ /**
65
+ * Extracts user claims from a token
66
+ * @param token JWT token string or previously decoded token
67
+ * @returns User claims object
68
+ */
69
+ export function extractClaims(token) {
70
+ try {
71
+ // Decode the token if it's a string
72
+ const decoded = typeof token === 'string' ? decodeToken(token) : token;
73
+ // Firebase puts custom claims in different places depending on the token type
74
+ // This is the key fix: handle all possible claim locations and formats
75
+ let claims = {};
76
+ // Get the user ID from various possible locations
77
+ const uid = decoded.sub || decoded.user_id || decoded.uid;
78
+ if (uid) {
79
+ claims.uid = uid;
80
+ }
81
+ // Get email from claims
82
+ if (decoded.email) {
83
+ claims.email = decoded.email;
84
+ }
85
+ // Get email verified status if available
86
+ if (decoded.email_verified !== undefined) {
87
+ claims.emailVerified = decoded.email_verified;
88
+ }
89
+ // Get name/display name if available
90
+ if (decoded.name) {
91
+ claims.name = decoded.name;
92
+ }
93
+ // Handle custom claims - they might be in different locations
94
+ // Option 1: Firebase Auth tokens typically put custom claims in a 'claims' property
95
+ if (decoded.claims) {
96
+ // Copy the custom claims to the top level
97
+ Object.entries(decoded.claims).forEach(([key, value]) => {
98
+ // Ensure boolean values are properly converted
99
+ if (value === 'true' || value === '1' || value === 1) {
100
+ claims[key] = true;
101
+ }
102
+ else if (value === 'false' || value === '0' || value === 0) {
103
+ claims[key] = false;
104
+ }
105
+ else {
106
+ claims[key] = value;
107
+ }
108
+ });
109
+ }
110
+ // Option 2: Some Firebase tokens might have claims directly at top level
111
+ // Check for common boolean flags directly
112
+ ['isClient', 'isConsultant', 'isAdmin', 'isSysAdmin'].forEach(flag => {
113
+ if (decoded[flag] !== undefined && claims[flag] === undefined) {
114
+ // Ensure boolean values are properly converted
115
+ if (decoded[flag] === 'true' || decoded[flag] === '1' || decoded[flag] === 1) {
116
+ claims[flag] = true;
117
+ }
118
+ else if (decoded[flag] === 'false' || decoded[flag] === '0' || decoded[flag] === 0) {
119
+ claims[flag] = false;
120
+ }
121
+ else {
122
+ claims[flag] = !!decoded[flag];
123
+ }
124
+ }
125
+ });
126
+ // Option 3: Some systems might put roles directly in the token
127
+ if (decoded.roles && !claims.roles) {
128
+ claims.roles = decoded.roles;
129
+ }
130
+ // Log detailed debug info to help troubleshoot claim extraction issues
131
+ logger.info('Extracted claims from token', {
132
+ uid: claims.uid,
133
+ hasRoles: !!claims.roles,
134
+ booleanFlags: {
135
+ isClient: claims.isClient,
136
+ isConsultant: claims.isConsultant,
137
+ isAdmin: claims.isAdmin,
138
+ isSysAdmin: claims.isSysAdmin
139
+ }
140
+ });
141
+ return claims;
142
+ }
143
+ catch (error) {
144
+ throw new TokenError(`Failed to extract claims: ${error instanceof Error ? error.message : String(error)}`, { originalError: error });
145
+ }
146
+ }
147
+ /**
148
+ * Gets user roles from claims
149
+ * @param claims User claims or token
150
+ * @returns Array of user roles
151
+ */
152
+ export function getUserRoles(claims) {
153
+ try {
154
+ // Extract claims if token was provided
155
+ let userClaims;
156
+ if (typeof claims === 'string') {
157
+ userClaims = extractClaims(claims);
158
+ }
159
+ else if ('exp' in claims && typeof claims.exp === 'number') {
160
+ userClaims = extractClaims(claims);
161
+ }
162
+ else {
163
+ userClaims = claims;
164
+ }
165
+ if (!userClaims) {
166
+ return [];
167
+ }
168
+ // Check if roles exist as an array or string
169
+ if (userClaims.roles) {
170
+ // Convert to array if it's a string
171
+ if (typeof userClaims.roles === 'string') {
172
+ // Handle comma-separated or space-separated strings
173
+ return userClaims.roles.split(/[,\s]+/).filter(Boolean);
174
+ }
175
+ // Already an array
176
+ if (Array.isArray(userClaims.roles)) {
177
+ return userClaims.roles;
178
+ }
179
+ }
180
+ // If no roles found, derive from boolean flags
181
+ const roles = [];
182
+ // Map boolean flags to roles
183
+ if (userClaims.isClient === true)
184
+ roles.push('client');
185
+ if (userClaims.isConsultant === true)
186
+ roles.push('consultant');
187
+ if (userClaims.isAdmin === true)
188
+ roles.push('admin');
189
+ if (userClaims.isSysAdmin === true)
190
+ roles.push('sysadmin');
191
+ return roles;
192
+ }
193
+ catch (error) {
194
+ logger.warn('Failed to get user roles', {
195
+ message: error instanceof Error ? error.message : String(error)
196
+ });
197
+ return [];
198
+ }
199
+ }
200
+ /**
201
+ * Checks if claims or token includes a specific role
202
+ * @param claims User claims or token
203
+ * @param role Role to check for
204
+ * @returns True if user has the specified role
205
+ */
206
+ export function hasRole(claims, role) {
207
+ if (!claims) {
208
+ return false;
209
+ }
210
+ try {
211
+ // Extract claims if token was provided
212
+ let userClaims;
213
+ if (typeof claims === 'string') {
214
+ userClaims = extractClaims(claims);
215
+ }
216
+ else if ('exp' in claims && typeof claims.exp === 'number') {
217
+ userClaims = extractClaims(claims);
218
+ }
219
+ else {
220
+ userClaims = claims;
221
+ }
222
+ // Check direct boolean flag first (e.g., isAdmin for 'admin' role)
223
+ const booleanFlag = `is${role.charAt(0).toUpperCase() + role.slice(1)}`;
224
+ if (userClaims[booleanFlag] === true) {
225
+ return true;
226
+ }
227
+ // Then check roles array
228
+ const roles = getUserRoles(userClaims);
229
+ return roles.includes(role);
230
+ }
231
+ catch (error) {
232
+ logger.warn(`Failed to check role "${role}"`, {
233
+ message: error instanceof Error ? error.message : String(error)
234
+ });
235
+ return false;
236
+ }
237
+ }
238
+ /**
239
+ * Checks if claims or token includes any of the specified roles
240
+ * @param claims User claims or token
241
+ * @param roles Roles to check for
242
+ * @returns True if user has any of the specified roles
243
+ */
244
+ export function hasAnyRole(claims, roles) {
245
+ if (!claims || !roles.length) {
246
+ return false;
247
+ }
248
+ return roles.some(role => hasRole(claims, role));
249
+ }
250
+ /**
251
+ * Checks if a token is expired
252
+ * @param token Token string or decoded token
253
+ * @param options Options for expiration check
254
+ * @returns True if token is expired or invalid
255
+ */
256
+ export function isTokenExpired(token, options = {}) {
257
+ if (!token) {
258
+ return true;
259
+ }
260
+ try {
261
+ // Decode the token if it's a string
262
+ const decoded = typeof token === 'string' ? decodeToken(token) : token;
263
+ // Check if token has expiration
264
+ if (!decoded.exp) {
265
+ logger.warn('Token has no expiration claim');
266
+ return false; // Consider non-expiring tokens as valid
267
+ }
268
+ // Get current time with buffer
269
+ const bufferSeconds = options.bufferSeconds || 60; // Default 60 second buffer
270
+ const now = Math.floor(Date.now() / 1000) + bufferSeconds;
271
+ // Check if token is expired
272
+ return decoded.exp < now;
273
+ }
274
+ catch (error) {
275
+ logger.warn('Error checking token expiration', {
276
+ message: error instanceof Error ? error.message : String(error)
277
+ });
278
+ return true; // Consider invalid tokens as expired
279
+ }
280
+ }
281
+ /**
282
+ * Validates a token
283
+ * @param token Token string
284
+ * @returns True if token is valid and not expired
285
+ */
286
+ export function isTokenValid(token) {
287
+ if (!token) {
288
+ return false;
289
+ }
290
+ try {
291
+ // Try to decode the token
292
+ const decoded = decodeToken(token);
293
+ // Check if token is expired
294
+ if (isTokenExpired(decoded)) {
295
+ return false;
296
+ }
297
+ return true;
298
+ }
299
+ catch (error) {
300
+ logger.warn('Error validating token', {
301
+ message: error instanceof Error ? error.message : String(error)
302
+ });
303
+ return false;
304
+ }
305
+ }
306
+ /**
307
+ * Stores a token securely
308
+ * @param token Token to store
309
+ * @param options Storage options
310
+ * @returns True if successful
311
+ */
312
+ export function storeToken(token, options = {}) {
313
+ try {
314
+ const { tokenType = 'id', mechanism = 'cookie', ttl = AUTH_TOKEN_TTL } = options;
315
+ const key = `${tokenType}Token`;
316
+ return secureStorage.setItem(key, token, {
317
+ namespace: AUTH_NAMESPACE,
318
+ mechanism,
319
+ ttl
320
+ });
321
+ }
322
+ catch (error) {
323
+ const logError = error instanceof Error ? error : new Error(String(error));
324
+ logger.error('Failed to store token', logError);
325
+ return false;
326
+ }
327
+ }
328
+ /**
329
+ * Retrieves a token from storage
330
+ * @param options Retrieval options
331
+ * @returns The token or null if not found
332
+ */
333
+ export function retrieveToken(options = {}) {
334
+ try {
335
+ const { tokenType = 'id', mechanism = 'cookie' } = options;
336
+ const key = `${tokenType}Token`;
337
+ return secureStorage.getItem(key, {
338
+ namespace: AUTH_NAMESPACE,
339
+ mechanism
340
+ });
341
+ }
342
+ catch (error) {
343
+ const logError = error instanceof Error ? error : new Error(String(error));
344
+ logger.error('Failed to retrieve token', logError);
345
+ return null;
346
+ }
347
+ }
348
+ /**
349
+ * Clears all tokens from storage
350
+ * @returns True if successful
351
+ */
352
+ export function clearTokens() {
353
+ try {
354
+ return secureStorage.clear({
355
+ namespace: AUTH_NAMESPACE,
356
+ allMechanisms: true
357
+ });
358
+ }
359
+ catch (error) {
360
+ const logError = error instanceof Error ? error : new Error(String(error));
361
+ logger.error('Failed to clear tokens', logError);
362
+ return false;
363
+ }
364
+ }
365
+ /**
366
+ * Gets a fresh ID token from Firebase Auth
367
+ * @param options Options for token refresh
368
+ * @returns Promise resolving to ID token
369
+ */
370
+ export async function getIdToken(options = {}) {
371
+ try {
372
+ const auth = getAuth();
373
+ const user = auth.currentUser;
374
+ if (!user) {
375
+ throw new TokenError('No authenticated user');
376
+ }
377
+ const { forceRefresh = false } = options;
378
+ // Get a fresh token
379
+ return await user.getIdToken(forceRefresh);
380
+ }
381
+ catch (error) {
382
+ throw new TokenError(`Failed to get ID token: ${error instanceof Error ? error.message : String(error)}`, { originalError: error });
383
+ }
384
+ }
385
+ /**
386
+ * Checks if two tokens are different
387
+ * @param oldToken First token
388
+ * @param newToken Second token
389
+ * @returns True if tokens are different
390
+ */
391
+ export function haveTokensChanged(oldToken, newToken) {
392
+ // Both null or same string
393
+ if (oldToken === newToken) {
394
+ return false;
395
+ }
396
+ // One is null, the other isn't
397
+ if (!oldToken || !newToken) {
398
+ return true;
399
+ }
400
+ // Both are strings, compare content
401
+ try {
402
+ // Get just the payload part for comparison
403
+ const oldPayload = oldToken.split('.')[1];
404
+ const newPayload = newToken.split('.')[1];
405
+ // Different payloads
406
+ if (oldPayload !== newPayload) {
407
+ return true;
408
+ }
409
+ return false;
410
+ }
411
+ catch (error) {
412
+ // If any error in comparison, assume they're different
413
+ logger.warn('Error comparing tokens', {
414
+ message: error instanceof Error ? error.message : String(error)
415
+ });
416
+ return true;
417
+ }
418
+ }
419
+ /**
420
+ * Safe version of decodeToken that does not throw
421
+ * @param token JWT token string
422
+ * @returns Result object with success status and data/error
423
+ */
424
+ export async function safeDecodeToken(token) {
425
+ try {
426
+ const data = decodeToken(token);
427
+ return {
428
+ success: true,
429
+ data
430
+ };
431
+ }
432
+ catch (error) {
433
+ return {
434
+ success: false,
435
+ error: error instanceof Error ? error : new Error(String(error))
436
+ };
437
+ }
438
+ }
439
+ /**
440
+ * Safe version of extractClaims that does not throw
441
+ * @param token JWT token string or decoded token
442
+ * @returns Result object with success status and data/error
443
+ */
444
+ export async function safeExtractClaims(token) {
445
+ try {
446
+ const data = extractClaims(token);
447
+ return {
448
+ success: true,
449
+ data
450
+ };
451
+ }
452
+ catch (error) {
453
+ return {
454
+ success: false,
455
+ error: error instanceof Error ? error : new Error(String(error))
456
+ };
457
+ }
458
+ }
459
+ /**
460
+ * Safe version of getIdToken that does not throw
461
+ * @param options Options for token refresh
462
+ * @returns Result object with success status and data/error
463
+ */
464
+ export async function safeGetIdToken(options = {}) {
465
+ try {
466
+ const data = await getIdToken(options);
467
+ return {
468
+ success: true,
469
+ data
470
+ };
471
+ }
472
+ catch (error) {
473
+ return {
474
+ success: false,
475
+ error: error instanceof Error ? error : new Error(String(error))
476
+ };
477
+ }
478
+ }
479
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@xbg.solutions/bpsk-utils-firebase-auth",
3
+ "version": "1.2.3",
4
+ "description": "XBG Firebase Auth - Auth service, token service, auth stores, auth guard",
5
+ "main": "lib/index.js",
6
+ "types": "lib/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "lib"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "build:watch": "tsc --watch",
14
+ "clean": "rm -rf lib",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "dependencies": {
21
+ "@xbg.solutions/bpsk-core": "^1.0.0",
22
+ "@xbg.solutions/bpsk-utils-csrf": "^1.0.0",
23
+ "@xbg.solutions/bpsk-utils-secure-storage": "^1.0.0",
24
+ "@xbg.solutions/bpsk-utils-rbac": "^1.0.0"
25
+ },
26
+ "peerDependencies": {
27
+ "firebase": "^11.0.0",
28
+ "svelte": "^5.0.0",
29
+ "@sveltejs/kit": "^2.0.0"
30
+ }
31
+ }