binoauth 0.0.11 → 0.0.12

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 (111) hide show
  1. package/README.md +359 -165
  2. package/dist/core/src/admin/client.d.ts +203 -0
  3. package/dist/core/src/admin/client.d.ts.map +1 -0
  4. package/dist/core/src/admin/client.js +391 -0
  5. package/dist/core/src/admin/client.js.map +1 -0
  6. package/dist/core/src/admin/index.d.ts +6 -0
  7. package/dist/core/src/admin/index.d.ts.map +1 -0
  8. package/dist/core/src/admin/index.js +5 -0
  9. package/dist/core/src/admin/index.js.map +1 -0
  10. package/dist/core/src/admin/types.d.ts +412 -0
  11. package/dist/core/src/admin/types.d.ts.map +1 -0
  12. package/dist/core/src/admin/types.js +5 -0
  13. package/dist/core/src/admin/types.js.map +1 -0
  14. package/dist/core/src/auth/client.d.ts +330 -0
  15. package/dist/core/src/auth/client.d.ts.map +1 -0
  16. package/dist/core/src/auth/client.js +408 -0
  17. package/dist/core/src/auth/client.js.map +1 -0
  18. package/dist/core/src/auth/error.d.ts +113 -0
  19. package/dist/core/src/auth/error.d.ts.map +1 -0
  20. package/dist/core/src/auth/error.js +257 -0
  21. package/dist/core/src/auth/error.js.map +1 -0
  22. package/dist/core/src/auth/flows/base-flow.d.ts +98 -0
  23. package/dist/core/src/auth/flows/base-flow.d.ts.map +1 -0
  24. package/dist/core/src/auth/flows/base-flow.js +182 -0
  25. package/dist/core/src/auth/flows/base-flow.js.map +1 -0
  26. package/dist/core/src/auth/flows/magic-link.d.ts +175 -0
  27. package/dist/core/src/auth/flows/magic-link.d.ts.map +1 -0
  28. package/dist/core/src/auth/flows/magic-link.js +228 -0
  29. package/dist/core/src/auth/flows/magic-link.js.map +1 -0
  30. package/dist/core/src/auth/flows/mfa.d.ts +81 -0
  31. package/dist/core/src/auth/flows/mfa.d.ts.map +1 -0
  32. package/dist/core/src/auth/flows/mfa.js +103 -0
  33. package/dist/core/src/auth/flows/mfa.js.map +1 -0
  34. package/dist/core/src/auth/flows/otp.d.ts +172 -0
  35. package/dist/core/src/auth/flows/otp.d.ts.map +1 -0
  36. package/dist/core/src/auth/flows/otp.js +222 -0
  37. package/dist/core/src/auth/flows/otp.js.map +1 -0
  38. package/dist/core/src/auth/flows/password.d.ts +242 -0
  39. package/dist/core/src/auth/flows/password.d.ts.map +1 -0
  40. package/dist/core/src/auth/flows/password.js +344 -0
  41. package/dist/core/src/auth/flows/password.js.map +1 -0
  42. package/dist/core/src/auth/flows/social.d.ts +209 -0
  43. package/dist/core/src/auth/flows/social.d.ts.map +1 -0
  44. package/dist/core/src/auth/flows/social.js +284 -0
  45. package/dist/core/src/auth/flows/social.js.map +1 -0
  46. package/dist/core/src/auth/index.d.ts +19 -0
  47. package/dist/core/src/auth/index.d.ts.map +1 -0
  48. package/dist/core/src/auth/index.js +32 -0
  49. package/dist/core/src/auth/index.js.map +1 -0
  50. package/dist/core/src/auth/types.d.ts +151 -0
  51. package/dist/core/src/auth/types.d.ts.map +1 -0
  52. package/dist/core/src/auth/types.js +7 -0
  53. package/dist/core/src/auth/types.js.map +1 -0
  54. package/dist/core/src/index.d.ts +53 -49
  55. package/dist/core/src/index.d.ts.map +1 -1
  56. package/dist/core/src/index.js +61 -343
  57. package/dist/core/src/index.js.map +1 -1
  58. package/dist/core/src/oauth/client.d.ts +322 -0
  59. package/dist/core/src/oauth/client.d.ts.map +1 -0
  60. package/dist/core/src/oauth/client.js +491 -0
  61. package/dist/core/src/oauth/client.js.map +1 -0
  62. package/dist/core/src/oauth/error.d.ts +18 -0
  63. package/dist/core/src/oauth/error.d.ts.map +1 -0
  64. package/dist/core/src/oauth/error.js +24 -0
  65. package/dist/core/src/oauth/error.js.map +1 -0
  66. package/dist/core/src/oauth/flows/authorization-code.d.ts +122 -0
  67. package/dist/core/src/oauth/flows/authorization-code.d.ts.map +1 -0
  68. package/dist/core/src/oauth/flows/authorization-code.js +278 -0
  69. package/dist/core/src/oauth/flows/authorization-code.js.map +1 -0
  70. package/dist/core/src/oauth/flows/base-flow.d.ts +17 -0
  71. package/dist/core/src/oauth/flows/base-flow.d.ts.map +1 -0
  72. package/dist/core/src/oauth/flows/base-flow.js +107 -0
  73. package/dist/core/src/oauth/flows/base-flow.js.map +1 -0
  74. package/dist/core/src/oauth/flows/client-credentials.d.ts +72 -0
  75. package/dist/core/src/oauth/flows/client-credentials.d.ts.map +1 -0
  76. package/dist/core/src/oauth/flows/client-credentials.js +100 -0
  77. package/dist/core/src/oauth/flows/client-credentials.js.map +1 -0
  78. package/dist/core/src/oauth/flows/device-code.d.ts +108 -0
  79. package/dist/core/src/oauth/flows/device-code.d.ts.map +1 -0
  80. package/dist/core/src/oauth/flows/device-code.js +193 -0
  81. package/dist/core/src/oauth/flows/device-code.js.map +1 -0
  82. package/dist/core/src/oauth/flows/refresh-token.d.ts +59 -0
  83. package/dist/core/src/oauth/flows/refresh-token.d.ts.map +1 -0
  84. package/dist/core/src/oauth/flows/refresh-token.js +105 -0
  85. package/dist/core/src/oauth/flows/refresh-token.js.map +1 -0
  86. package/dist/core/src/oauth/index.d.ts +12 -0
  87. package/dist/core/src/oauth/index.d.ts.map +1 -0
  88. package/dist/core/src/oauth/index.js +11 -0
  89. package/dist/core/src/oauth/index.js.map +1 -0
  90. package/dist/core/src/oauth/storage/encryption.d.ts +12 -0
  91. package/dist/core/src/oauth/storage/encryption.d.ts.map +1 -0
  92. package/dist/core/src/oauth/storage/encryption.js +76 -0
  93. package/dist/core/src/oauth/storage/encryption.js.map +1 -0
  94. package/dist/core/src/oauth/storage/index.d.ts +201 -0
  95. package/dist/core/src/oauth/storage/index.d.ts.map +1 -0
  96. package/dist/core/src/oauth/storage/index.js +322 -0
  97. package/dist/core/src/oauth/storage/index.js.map +1 -0
  98. package/dist/core/src/oauth/storage/strategies.d.ts +34 -0
  99. package/dist/core/src/oauth/storage/strategies.d.ts.map +1 -0
  100. package/dist/core/src/oauth/storage/strategies.js +100 -0
  101. package/dist/core/src/oauth/storage/strategies.js.map +1 -0
  102. package/dist/core/src/oauth/types.d.ts +261 -0
  103. package/dist/core/src/oauth/types.d.ts.map +1 -0
  104. package/dist/core/src/oauth/types.js +39 -0
  105. package/dist/core/src/oauth/types.js.map +1 -0
  106. package/dist/core/src/oauth/utils.d.ts +56 -0
  107. package/dist/core/src/oauth/utils.d.ts.map +1 -0
  108. package/dist/core/src/oauth/utils.js +140 -0
  109. package/dist/core/src/oauth/utils.js.map +1 -0
  110. package/dist/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +1 -1
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Authentication error codes and error handling
3
+ */
4
+ /**
5
+ * Authentication error codes
6
+ *
7
+ * Standardized error codes for different authentication scenarios.
8
+ */
9
+ export var AuthErrorCode;
10
+ (function (AuthErrorCode) {
11
+ // Credential errors
12
+ AuthErrorCode["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
13
+ AuthErrorCode["INVALID_EMAIL"] = "INVALID_EMAIL";
14
+ AuthErrorCode["INVALID_PASSWORD"] = "INVALID_PASSWORD";
15
+ AuthErrorCode["INVALID_OTP"] = "INVALID_OTP";
16
+ AuthErrorCode["EXPIRED_OTP"] = "EXPIRED_OTP";
17
+ AuthErrorCode["INVALID_TOKEN"] = "INVALID_TOKEN";
18
+ AuthErrorCode["EXPIRED_TOKEN"] = "EXPIRED_TOKEN";
19
+ // Account state errors
20
+ AuthErrorCode["ACCOUNT_NOT_FOUND"] = "ACCOUNT_NOT_FOUND";
21
+ AuthErrorCode["ACCOUNT_LOCKED"] = "ACCOUNT_LOCKED";
22
+ AuthErrorCode["ACCOUNT_DISABLED"] = "ACCOUNT_DISABLED";
23
+ AuthErrorCode["EMAIL_NOT_VERIFIED"] = "EMAIL_NOT_VERIFIED";
24
+ AuthErrorCode["PHONE_NOT_VERIFIED"] = "PHONE_NOT_VERIFIED";
25
+ // MFA errors
26
+ AuthErrorCode["MFA_REQUIRED"] = "MFA_REQUIRED";
27
+ AuthErrorCode["MFA_INVALID_METHOD"] = "MFA_INVALID_METHOD";
28
+ AuthErrorCode["MFA_CHALLENGE_EXPIRED"] = "MFA_CHALLENGE_EXPIRED";
29
+ // Rate limiting
30
+ AuthErrorCode["TOO_MANY_ATTEMPTS"] = "TOO_MANY_ATTEMPTS";
31
+ AuthErrorCode["RATE_LIMITED"] = "RATE_LIMITED";
32
+ // Registration errors
33
+ AuthErrorCode["EMAIL_ALREADY_EXISTS"] = "EMAIL_ALREADY_EXISTS";
34
+ AuthErrorCode["PHONE_ALREADY_EXISTS"] = "PHONE_ALREADY_EXISTS";
35
+ AuthErrorCode["WEAK_PASSWORD"] = "WEAK_PASSWORD";
36
+ AuthErrorCode["TERMS_NOT_ACCEPTED"] = "TERMS_NOT_ACCEPTED";
37
+ // System errors
38
+ AuthErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
39
+ AuthErrorCode["SERVER_ERROR"] = "SERVER_ERROR";
40
+ AuthErrorCode["INVALID_CONFIG"] = "INVALID_CONFIG";
41
+ AuthErrorCode["MISSING_REQUIRED_FIELD"] = "MISSING_REQUIRED_FIELD";
42
+ // OAuth specific
43
+ AuthErrorCode["OAUTH_ERROR"] = "OAUTH_ERROR";
44
+ AuthErrorCode["INVALID_GRANT"] = "INVALID_GRANT";
45
+ AuthErrorCode["INVALID_CLIENT"] = "INVALID_CLIENT";
46
+ AuthErrorCode["INVALID_SCOPE"] = "INVALID_SCOPE";
47
+ // Unknown
48
+ AuthErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
49
+ })(AuthErrorCode || (AuthErrorCode = {}));
50
+ /**
51
+ * Authentication error class
52
+ *
53
+ * Provides structured error information for authentication failures.
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * try {
58
+ * await authClient.login(email, password);
59
+ * } catch (error) {
60
+ * if (error instanceof AuthError) {
61
+ * switch (error.code) {
62
+ * case AuthErrorCode.INVALID_CREDENTIALS:
63
+ * console.log('Invalid email or password');
64
+ * break;
65
+ * case AuthErrorCode.MFA_REQUIRED:
66
+ * console.log('MFA required:', error.details);
67
+ * break;
68
+ * default:
69
+ * console.log('Auth error:', error.message);
70
+ * }
71
+ * }
72
+ * }
73
+ * ```
74
+ */
75
+ export class AuthError extends Error {
76
+ code;
77
+ details;
78
+ originalError;
79
+ /**
80
+ * Creates a new authentication error
81
+ *
82
+ * @param code - Standardized error code
83
+ * @param message - Human-readable error message
84
+ * @param details - Additional error details
85
+ * @param originalError - Original error that caused this error
86
+ */
87
+ constructor(code, message, details, originalError) {
88
+ super(message);
89
+ this.code = code;
90
+ this.details = details;
91
+ this.originalError = originalError;
92
+ this.name = 'AuthError';
93
+ // Maintain proper stack trace
94
+ if (Error.captureStackTrace) {
95
+ Error.captureStackTrace(this, AuthError);
96
+ }
97
+ }
98
+ /**
99
+ * Creates an AuthError from an unknown error
100
+ *
101
+ * @param error - Unknown error object
102
+ * @param defaultCode - Default error code if none can be determined
103
+ * @returns AuthError instance
104
+ */
105
+ static fromError(error, defaultCode = AuthErrorCode.UNKNOWN_ERROR) {
106
+ if (error instanceof AuthError) {
107
+ return error;
108
+ }
109
+ // Extract error information
110
+ const message = error?.message || error?.error || 'An unknown error occurred';
111
+ const details = error?.response?.data || error?.details || error;
112
+ // Try to map common error patterns to codes
113
+ const code = mapErrorToCode(error, defaultCode);
114
+ return new AuthError(code, message, details, error);
115
+ }
116
+ /**
117
+ * Converts the error to a JSON-serializable object
118
+ *
119
+ * @returns Plain object representation of the error
120
+ */
121
+ toJSON() {
122
+ return {
123
+ name: this.name,
124
+ code: this.code,
125
+ message: this.message,
126
+ details: this.details,
127
+ stack: this.stack
128
+ };
129
+ }
130
+ }
131
+ /**
132
+ * Maps common error patterns to standardized error codes
133
+ *
134
+ * @param error - Error object to analyze
135
+ * @param defaultCode - Default code if no mapping found
136
+ * @returns Mapped error code
137
+ */
138
+ function mapErrorToCode(error, defaultCode) {
139
+ const message = (error?.message || error?.error || '').toLowerCase();
140
+ const statusCode = error?.response?.status || error?.status;
141
+ // HTTP status code mappings
142
+ switch (statusCode) {
143
+ case 401:
144
+ return AuthErrorCode.INVALID_CREDENTIALS;
145
+ case 403:
146
+ return AuthErrorCode.ACCOUNT_DISABLED;
147
+ case 404:
148
+ return AuthErrorCode.ACCOUNT_NOT_FOUND;
149
+ case 429:
150
+ return AuthErrorCode.RATE_LIMITED;
151
+ case 500:
152
+ case 502:
153
+ case 503:
154
+ case 504:
155
+ return AuthErrorCode.SERVER_ERROR;
156
+ }
157
+ // Message pattern mappings
158
+ if (message.includes('invalid credentials') || message.includes('unauthorized')) {
159
+ return AuthErrorCode.INVALID_CREDENTIALS;
160
+ }
161
+ if (message.includes('invalid email') || message.includes('email')) {
162
+ return AuthErrorCode.INVALID_EMAIL;
163
+ }
164
+ if (message.includes('invalid password') || message.includes('password')) {
165
+ return AuthErrorCode.INVALID_PASSWORD;
166
+ }
167
+ if (message.includes('invalid otp') || message.includes('invalid code')) {
168
+ return AuthErrorCode.INVALID_OTP;
169
+ }
170
+ if (message.includes('expired otp') || message.includes('expired code')) {
171
+ return AuthErrorCode.EXPIRED_OTP;
172
+ }
173
+ if (message.includes('mfa required') || message.includes('two-factor')) {
174
+ return AuthErrorCode.MFA_REQUIRED;
175
+ }
176
+ if (message.includes('account locked') || message.includes('locked')) {
177
+ return AuthErrorCode.ACCOUNT_LOCKED;
178
+ }
179
+ if (message.includes('account not found') || message.includes('user not found')) {
180
+ return AuthErrorCode.ACCOUNT_NOT_FOUND;
181
+ }
182
+ if (message.includes('email already exists') || message.includes('email taken')) {
183
+ return AuthErrorCode.EMAIL_ALREADY_EXISTS;
184
+ }
185
+ if (message.includes('too many attempts') || message.includes('rate limit')) {
186
+ return AuthErrorCode.TOO_MANY_ATTEMPTS;
187
+ }
188
+ if (message.includes('network') || message.includes('connection')) {
189
+ return AuthErrorCode.NETWORK_ERROR;
190
+ }
191
+ return defaultCode;
192
+ }
193
+ /**
194
+ * Creates user-friendly error messages for error codes
195
+ *
196
+ * @param code - Error code
197
+ * @returns User-friendly error message
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const message = getErrorMessage(AuthErrorCode.INVALID_CREDENTIALS);
202
+ * console.log(message); // "Invalid email or password"
203
+ * ```
204
+ */
205
+ export function getErrorMessage(code) {
206
+ switch (code) {
207
+ case AuthErrorCode.INVALID_CREDENTIALS:
208
+ return 'Invalid email or password';
209
+ case AuthErrorCode.INVALID_EMAIL:
210
+ return 'Please enter a valid email address';
211
+ case AuthErrorCode.INVALID_PASSWORD:
212
+ return 'Password is invalid';
213
+ case AuthErrorCode.INVALID_OTP:
214
+ return 'Invalid verification code';
215
+ case AuthErrorCode.EXPIRED_OTP:
216
+ return 'Verification code has expired';
217
+ case AuthErrorCode.INVALID_TOKEN:
218
+ return 'Invalid or expired token';
219
+ case AuthErrorCode.EXPIRED_TOKEN:
220
+ return 'Token has expired';
221
+ case AuthErrorCode.ACCOUNT_NOT_FOUND:
222
+ return 'Account not found';
223
+ case AuthErrorCode.ACCOUNT_LOCKED:
224
+ return 'Account is temporarily locked';
225
+ case AuthErrorCode.ACCOUNT_DISABLED:
226
+ return 'Account has been disabled';
227
+ case AuthErrorCode.EMAIL_NOT_VERIFIED:
228
+ return 'Please verify your email address';
229
+ case AuthErrorCode.PHONE_NOT_VERIFIED:
230
+ return 'Please verify your phone number';
231
+ case AuthErrorCode.MFA_REQUIRED:
232
+ return 'Multi-factor authentication required';
233
+ case AuthErrorCode.TOO_MANY_ATTEMPTS:
234
+ return 'Too many failed attempts. Please try again later';
235
+ case AuthErrorCode.RATE_LIMITED:
236
+ return 'Too many requests. Please try again later';
237
+ case AuthErrorCode.EMAIL_ALREADY_EXISTS:
238
+ return 'An account with this email already exists';
239
+ case AuthErrorCode.PHONE_ALREADY_EXISTS:
240
+ return 'An account with this phone number already exists';
241
+ case AuthErrorCode.WEAK_PASSWORD:
242
+ return 'Password is too weak';
243
+ case AuthErrorCode.TERMS_NOT_ACCEPTED:
244
+ return 'Please accept the terms and conditions';
245
+ case AuthErrorCode.NETWORK_ERROR:
246
+ return 'Network connection error';
247
+ case AuthErrorCode.SERVER_ERROR:
248
+ return 'Server error. Please try again later';
249
+ case AuthErrorCode.INVALID_CONFIG:
250
+ return 'Invalid configuration';
251
+ case AuthErrorCode.MISSING_REQUIRED_FIELD:
252
+ return 'Required field is missing';
253
+ default:
254
+ return 'An unexpected error occurred';
255
+ }
256
+ }
257
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../src/auth/error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Base authentication flow class
3
+ *
4
+ * Provides common functionality for all authentication flows including
5
+ * API client setup, error handling, and response processing.
6
+ */
7
+ import type { AuthenticationApi, OAuth2Api, UserProfileApi, ExternalAuthApi, Configuration as TenantConfiguration } from "@binoauth/tenant-sdk";
8
+ import type { BinoAuthConfig, AuthResult, User } from "../types";
9
+ import { AuthError, AuthErrorCode } from "../error";
10
+ /**
11
+ * Base class for all authentication flows
12
+ *
13
+ * Provides common functionality including API client management,
14
+ * error handling, and response processing using the actual tenant-sdk APIs.
15
+ */
16
+ export declare abstract class BaseAuthFlow {
17
+ protected config: BinoAuthConfig;
18
+ protected tenantConfig: TenantConfiguration;
19
+ protected authApi: AuthenticationApi;
20
+ protected oauthApi: OAuth2Api;
21
+ protected userApi: UserProfileApi;
22
+ protected externalAuthApi: ExternalAuthApi;
23
+ /**
24
+ * Creates a new base authentication flow
25
+ *
26
+ * @param config - BinoAuth configuration
27
+ */
28
+ constructor(config: BinoAuthConfig);
29
+ /**
30
+ * Validates the configuration
31
+ *
32
+ * @throws {AuthError} When required configuration is missing
33
+ */
34
+ protected validateConfig(): void;
35
+ /**
36
+ * Initializes the API clients using the actual tenant-sdk
37
+ */
38
+ protected initializeAPIs(): void;
39
+ /**
40
+ * Processes an API response into a standardized AuthResult
41
+ *
42
+ * @param response - Raw API response from tenant-sdk
43
+ * @param includeUserInfo - Whether to fetch user information
44
+ * @returns Processed auth result
45
+ */
46
+ protected processAuthResponse(response: any, includeUserInfo?: boolean): Promise<AuthResult>;
47
+ /**
48
+ * Fetches user information using an access token with the actual UserProfileApi
49
+ *
50
+ * @param accessToken - Access token
51
+ * @returns User information
52
+ */
53
+ protected fetchUserInfo(accessToken: string): Promise<User>;
54
+ /**
55
+ * Handles API errors and converts them to AuthErrors
56
+ *
57
+ * @param error - Raw error from tenant-sdk API
58
+ * @param defaultCode - Default error code if mapping fails
59
+ * @returns AuthError instance
60
+ */
61
+ protected handleError(error: any, defaultCode?: AuthErrorCode): AuthError;
62
+ /**
63
+ * Makes a safe API call with error handling
64
+ *
65
+ * @param apiCall - Function that makes the tenant-sdk API call
66
+ * @param errorCode - Default error code for failures
67
+ * @returns Promise with the API response
68
+ */
69
+ protected safeApiCall<T>(apiCall: () => Promise<T>, errorCode?: AuthErrorCode): Promise<T>;
70
+ /**
71
+ * Validates email format
72
+ *
73
+ * @param email - Email to validate
74
+ * @throws {AuthError} When email is invalid
75
+ */
76
+ protected validateEmail(email: string): void;
77
+ /**
78
+ * Validates phone number format
79
+ *
80
+ * @param phone - Phone number to validate
81
+ * @throws {AuthError} When phone number is invalid
82
+ */
83
+ protected validatePhone(phone: string): void;
84
+ /**
85
+ * Validates password strength
86
+ *
87
+ * @param password - Password to validate
88
+ * @throws {AuthError} When password is too weak
89
+ */
90
+ protected validatePassword(password: string): void;
91
+ /**
92
+ * Gets the tenant identifier from config
93
+ *
94
+ * @returns Tenant identifier
95
+ */
96
+ protected getTenant(): string;
97
+ }
98
+ //# sourceMappingURL=base-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-flow.d.ts","sourceRoot":"","sources":["../../../../../src/auth/flows/base-flow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,eAAe,EACf,aAAa,IAAI,mBAAmB,EACrC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpD;;;;;GAKG;AACH,8BAAsB,YAAY;IAYpB,SAAS,CAAC,MAAM,EAAE,cAAc;IAX5C,SAAS,CAAC,YAAY,EAAG,mBAAmB,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAG,iBAAiB,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAG,cAAc,CAAC;IACnC,SAAS,CAAC,eAAe,EAAG,eAAe,CAAC;IAE5C;;;;OAIG;gBACmB,MAAM,EAAE,cAAc;IAK5C;;;;OAIG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAgBhC;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAyBhC;;;;;;OAMG;cACa,mBAAmB,CACjC,QAAQ,EAAE,GAAG,EACb,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,UAAU,CAAC;IAqBtB;;;;;OAKG;cACa,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,GAAE,aAA0C,GAAG,SAAS;IAIrG;;;;;;OAMG;cACa,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,SAAS,GAAE,aAA0C,GACpD,OAAO,CAAC,CAAC,CAAC;IAQb;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU5C;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW5C;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASlD;;;;OAIG;IACH,SAAS,CAAC,SAAS,IAAI,MAAM;CAG9B"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Base authentication flow class
3
+ *
4
+ * Provides common functionality for all authentication flows including
5
+ * API client setup, error handling, and response processing.
6
+ */
7
+ import { AuthError, AuthErrorCode } from "../error";
8
+ /**
9
+ * Base class for all authentication flows
10
+ *
11
+ * Provides common functionality including API client management,
12
+ * error handling, and response processing using the actual tenant-sdk APIs.
13
+ */
14
+ export class BaseAuthFlow {
15
+ config;
16
+ tenantConfig;
17
+ authApi;
18
+ oauthApi;
19
+ userApi;
20
+ externalAuthApi;
21
+ /**
22
+ * Creates a new base authentication flow
23
+ *
24
+ * @param config - BinoAuth configuration
25
+ */
26
+ constructor(config) {
27
+ this.config = config;
28
+ this.validateConfig();
29
+ this.initializeAPIs();
30
+ }
31
+ /**
32
+ * Validates the configuration
33
+ *
34
+ * @throws {AuthError} When required configuration is missing
35
+ */
36
+ validateConfig() {
37
+ if (!this.config.issuer && !this.config.baseUrl) {
38
+ throw new AuthError(AuthErrorCode.INVALID_CONFIG, 'Either issuer or baseUrl must be provided');
39
+ }
40
+ if (!this.config.clientId) {
41
+ throw new AuthError(AuthErrorCode.INVALID_CONFIG, 'clientId is required');
42
+ }
43
+ }
44
+ /**
45
+ * Initializes the API clients using the actual tenant-sdk
46
+ */
47
+ initializeAPIs() {
48
+ const baseUrl = this.config.baseUrl || this.config.issuer;
49
+ // Configure tenant SDK
50
+ this.tenantConfig = new (require("@binoauth/tenant-sdk").Configuration)({
51
+ basePath: baseUrl,
52
+ headers: this.config.apiKey ? {
53
+ "X-API-Key": this.config.apiKey,
54
+ } : undefined,
55
+ });
56
+ // Initialize all available APIs from tenant-sdk
57
+ const { AuthenticationApi, OAuth2Api, UserProfileApi, ExternalAuthApi } = require("@binoauth/tenant-sdk");
58
+ this.authApi = new AuthenticationApi(this.tenantConfig);
59
+ this.oauthApi = new OAuth2Api(this.tenantConfig);
60
+ this.userApi = new UserProfileApi(this.tenantConfig);
61
+ this.externalAuthApi = new ExternalAuthApi(this.tenantConfig);
62
+ }
63
+ /**
64
+ * Processes an API response into a standardized AuthResult
65
+ *
66
+ * @param response - Raw API response from tenant-sdk
67
+ * @param includeUserInfo - Whether to fetch user information
68
+ * @returns Processed auth result
69
+ */
70
+ async processAuthResponse(response, includeUserInfo = true) {
71
+ try {
72
+ // Handle different response formats from tenant-sdk
73
+ const result = {
74
+ accessToken: response.accessToken || response.access_token,
75
+ refreshToken: response.refreshToken || response.refresh_token,
76
+ tokenType: response.tokenType || 'Bearer',
77
+ accessTokenExpires: response.accessTokenExpires || response.expiresIn || response.expires_in,
78
+ refreshTokenExpires: response.refreshTokenExpires,
79
+ requiresMfa: response.requiresMfa,
80
+ };
81
+ // Note: User info is typically included in the response or fetched separately
82
+ // The LoginResponse type doesn't include a user field by default
83
+ return result;
84
+ }
85
+ catch (error) {
86
+ throw AuthError.fromError(error, AuthErrorCode.SERVER_ERROR);
87
+ }
88
+ }
89
+ /**
90
+ * Fetches user information using an access token with the actual UserProfileApi
91
+ *
92
+ * @param accessToken - Access token
93
+ * @returns User information
94
+ */
95
+ async fetchUserInfo(accessToken) {
96
+ try {
97
+ // Create a temporary config with the access token
98
+ const authConfig = new (require("@binoauth/tenant-sdk").Configuration)({
99
+ basePath: this.config.baseUrl || this.config.issuer,
100
+ accessToken: accessToken,
101
+ });
102
+ const userApi = new (require("@binoauth/tenant-sdk").UserProfileApi)(authConfig);
103
+ const response = await userApi.getCurrentUserApiV1AuthUserinfoGet();
104
+ // Return the response directly as it matches UserInfoResponse (User type)
105
+ return response;
106
+ }
107
+ catch (error) {
108
+ throw AuthError.fromError(error, AuthErrorCode.SERVER_ERROR);
109
+ }
110
+ }
111
+ /**
112
+ * Handles API errors and converts them to AuthErrors
113
+ *
114
+ * @param error - Raw error from tenant-sdk API
115
+ * @param defaultCode - Default error code if mapping fails
116
+ * @returns AuthError instance
117
+ */
118
+ handleError(error, defaultCode = AuthErrorCode.SERVER_ERROR) {
119
+ return AuthError.fromError(error, defaultCode);
120
+ }
121
+ /**
122
+ * Makes a safe API call with error handling
123
+ *
124
+ * @param apiCall - Function that makes the tenant-sdk API call
125
+ * @param errorCode - Default error code for failures
126
+ * @returns Promise with the API response
127
+ */
128
+ async safeApiCall(apiCall, errorCode = AuthErrorCode.SERVER_ERROR) {
129
+ try {
130
+ return await apiCall();
131
+ }
132
+ catch (error) {
133
+ throw this.handleError(error, errorCode);
134
+ }
135
+ }
136
+ /**
137
+ * Validates email format
138
+ *
139
+ * @param email - Email to validate
140
+ * @throws {AuthError} When email is invalid
141
+ */
142
+ validateEmail(email) {
143
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
144
+ if (!emailRegex.test(email)) {
145
+ throw new AuthError(AuthErrorCode.INVALID_EMAIL, 'Invalid email format');
146
+ }
147
+ }
148
+ /**
149
+ * Validates phone number format
150
+ *
151
+ * @param phone - Phone number to validate
152
+ * @throws {AuthError} When phone number is invalid
153
+ */
154
+ validatePhone(phone) {
155
+ // Basic phone validation - can be enhanced based on requirements
156
+ const phoneRegex = /^\+?[\d\s\-\(\)]{10,}$/;
157
+ if (!phoneRegex.test(phone)) {
158
+ throw new AuthError(AuthErrorCode.INVALID_EMAIL, // Reusing email error for now
159
+ 'Invalid phone number format');
160
+ }
161
+ }
162
+ /**
163
+ * Validates password strength
164
+ *
165
+ * @param password - Password to validate
166
+ * @throws {AuthError} When password is too weak
167
+ */
168
+ validatePassword(password) {
169
+ if (password.length < 8) {
170
+ throw new AuthError(AuthErrorCode.WEAK_PASSWORD, 'Password must be at least 8 characters long');
171
+ }
172
+ }
173
+ /**
174
+ * Gets the tenant identifier from config
175
+ *
176
+ * @returns Tenant identifier
177
+ */
178
+ getTenant() {
179
+ return this.config.tenant || 'default';
180
+ }
181
+ }
182
+ //# sourceMappingURL=base-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-flow.js","sourceRoot":"","sources":["../../../../../src/auth/flows/base-flow.ts"],"names":[],"mappings":"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"}