binoauth 0.0.11 → 0.0.13

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,330 @@
1
+ /**
2
+ * Unified BinoAuth authentication client
3
+ *
4
+ * Provides a single interface for all authentication methods including
5
+ * OAuth, password, magic link, OTP, MFA, and social authentication.
6
+ */
7
+ import type { BinoAuthConfig, LoginRequest, SignupRequest, AuthResult, User, PasswordResetRequest, PasswordResetData, SocialProvider, MFAMethod } from "./types";
8
+ import { BinoAuthOAuth } from "../oauth/client";
9
+ import { PasswordFlow } from "./flows/password";
10
+ import { MagicLinkFlow } from "./flows/magic-link";
11
+ import { OTPFlow } from "./flows/otp";
12
+ import { MFAFlow } from "./flows/mfa";
13
+ import { SocialFlow } from "./flows/social";
14
+ /**
15
+ * Unified BinoAuth authentication client
16
+ *
17
+ * Provides a comprehensive authentication solution with multiple flows
18
+ * and methods. This is the main entry point for most authentication needs.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { BinoAuthClient } from 'binoauth';
23
+ *
24
+ * const auth = new BinoAuthClient({
25
+ * issuer: 'https://auth.binoauth.com',
26
+ * clientId: 'your_client_id',
27
+ * redirectUri: 'https://yourapp.com/callback',
28
+ * apiKey: 'your_api_key'
29
+ * });
30
+ *
31
+ * // Password authentication
32
+ * const result = await auth.loginWithPassword('user@example.com', 'password123');
33
+ *
34
+ * // Magic link authentication
35
+ * await auth.sendMagicLink('user@example.com', 'https://yourapp.com/dashboard');
36
+ *
37
+ * // OAuth authentication
38
+ * const oauthUrl = await auth.getOAuthLoginUrl();
39
+ * window.location.href = oauthUrl;
40
+ *
41
+ * // Social authentication
42
+ * const googleUrl = await auth.getSocialLoginUrl('google');
43
+ * window.location.href = googleUrl;
44
+ * ```
45
+ */
46
+ export declare class BinoAuthClient {
47
+ private config;
48
+ readonly oauth: BinoAuthOAuth;
49
+ readonly password: PasswordFlow;
50
+ readonly magicLink: MagicLinkFlow;
51
+ readonly otp: OTPFlow;
52
+ readonly mfa: MFAFlow;
53
+ readonly social: SocialFlow;
54
+ /**
55
+ * Creates a new BinoAuth client instance
56
+ *
57
+ * @param config - BinoAuth configuration
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * // Minimal configuration
62
+ * const auth = new BinoAuthClient({
63
+ * issuer: 'https://auth.binoauth.com',
64
+ * clientId: 'your_client_id'
65
+ * });
66
+ *
67
+ * // Full configuration
68
+ * const auth = new BinoAuthClient({
69
+ * issuer: 'https://auth.binoauth.com',
70
+ * clientId: 'your_client_id',
71
+ * redirectUri: 'https://yourapp.com/callback',
72
+ * scope: 'openid profile email',
73
+ * apiKey: 'your_api_key',
74
+ * tenant: 'your_tenant_id',
75
+ * enableMFA: true
76
+ * });
77
+ * ```
78
+ */
79
+ constructor(config: BinoAuthConfig);
80
+ /**
81
+ * Validates the client configuration
82
+ *
83
+ * @throws {AuthError} When configuration is invalid
84
+ */
85
+ private validateConfig;
86
+ /**
87
+ * Generates a default encryption key for token storage
88
+ *
89
+ * @returns Encryption key
90
+ */
91
+ private generateEncryptionKey;
92
+ /**
93
+ * Authenticates a user with email and password
94
+ *
95
+ * @param email - User's email address
96
+ * @param password - User's password
97
+ * @param rememberMe - Whether to remember the user
98
+ * @returns Promise resolving to authentication result
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * try {
103
+ * const result = await auth.loginWithPassword(
104
+ * 'user@example.com',
105
+ * 'password123',
106
+ * true // remember me
107
+ * );
108
+ *
109
+ * if (result.success) {
110
+ * console.log('Login successful:', result.user);
111
+ * }
112
+ * } catch (error) {
113
+ * if (error.code === AuthErrorCode.MFA_REQUIRED) {
114
+ * // Handle MFA challenge
115
+ * const challenge = error.details.mfaChallenge;
116
+ * await auth.sendMFAChallenge(challenge.challengeId, 'sms');
117
+ * }
118
+ * }
119
+ * ```
120
+ */
121
+ loginWithPassword(email: string, password: string, rememberMe?: boolean): Promise<AuthResult>;
122
+ /**
123
+ * Authenticates a user with credentials object
124
+ *
125
+ * @param credentials - Login credentials
126
+ * @returns Promise resolving to authentication result
127
+ */
128
+ loginWithCredentials(credentials: LoginRequest): Promise<AuthResult>;
129
+ /**
130
+ * Registers a new user account
131
+ *
132
+ * @param userData - User registration data
133
+ * @returns Promise resolving to authentication result
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const result = await auth.register({
138
+ * email: 'newuser@example.com',
139
+ * password: 'securepassword123',
140
+ * name: 'John Doe',
141
+ * acceptTerms: true
142
+ * });
143
+ * ```
144
+ */
145
+ register(userData: SignupRequest): Promise<AuthResult>;
146
+ /**
147
+ * Sends a magic link to the user's email
148
+ *
149
+ * @param email - User's email address
150
+ * @param returnTo - URL to redirect to after authentication
151
+ * @returns Promise resolving when magic link is sent
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * await auth.sendMagicLink('user@example.com', 'https://myapp.com/dashboard');
156
+ * console.log('Magic link sent! Check your email.');
157
+ * ```
158
+ */
159
+ sendMagicLink(email: string, returnTo?: string): Promise<void>;
160
+ /**
161
+ * Verifies a magic link token
162
+ *
163
+ * @param token - Magic link token
164
+ * @returns Promise resolving to authentication result
165
+ */
166
+ verifyMagicLink(token: string): Promise<AuthResult>;
167
+ /**
168
+ * Sends an OTP to the user's email
169
+ *
170
+ * @param email - User's email address
171
+ * @returns Promise resolving when OTP is sent
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * await auth.sendEmailOTP('user@example.com');
176
+ * console.log('Verification code sent to your email');
177
+ * ```
178
+ */
179
+ /**
180
+ * Note: Email OTP is not supported. Use sendPhoneOTP instead.
181
+ * @deprecated Use sendPhoneOTP for SMS OTP
182
+ */
183
+ sendEmailOTP(email: string): Promise<void>;
184
+ /**
185
+ * Sends an OTP to the user's phone
186
+ *
187
+ * @param phone - User's phone number
188
+ * @returns Promise resolving when OTP is sent
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * await auth.sendPhoneOTP('+1234567890');
193
+ * console.log('Verification code sent to your phone');
194
+ * ```
195
+ */
196
+ sendPhoneOTP(phone: string): Promise<void>;
197
+ /**
198
+ * Verifies an OTP code
199
+ *
200
+ * @param code - OTP code
201
+ * @param method - OTP method ('email' or 'sms')
202
+ * @returns Promise resolving to authentication result
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * const result = await auth.verifyOTP('123456', 'email');
207
+ * if (result.success) {
208
+ * console.log('OTP verification successful');
209
+ * }
210
+ * ```
211
+ */
212
+ verifyOTP(code: string): Promise<AuthResult>;
213
+ /**
214
+ * Gets the OAuth authorization URL
215
+ *
216
+ * @returns Promise resolving to authorization URL
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * const oauthUrl = await auth.getOAuthLoginUrl();
221
+ * window.location.href = oauthUrl;
222
+ * ```
223
+ */
224
+ getOAuthLoginUrl(): Promise<string>;
225
+ /**
226
+ * Handles OAuth callback
227
+ *
228
+ * @param code - Authorization code
229
+ * @param state - State parameter
230
+ * @returns Promise resolving when callback is handled
231
+ */
232
+ handleOAuthCallback(code: string, state: string): Promise<void>;
233
+ /**
234
+ * Gets social login URL for a provider
235
+ *
236
+ * @param provider - Social provider
237
+ * @param request - Optional social auth request
238
+ * @returns Promise resolving to authorization URL
239
+ *
240
+ * @example
241
+ * ```typescript
242
+ * const googleUrl = await auth.getSocialLoginUrl('google', {
243
+ * returnTo: 'https://myapp.com/dashboard'
244
+ * });
245
+ * window.location.href = googleUrl;
246
+ * ```
247
+ */
248
+ getSocialLoginUrl(provider: SocialProvider, returnTo: string, redirectUri?: string): Promise<string>;
249
+ /**
250
+ * Handles social authentication callback
251
+ *
252
+ * @param provider - Social provider
253
+ * @param code - Authorization code
254
+ * @param state - State parameter
255
+ * @returns Promise resolving to authentication result
256
+ */
257
+ handleSocialCallback(provider: SocialProvider, code: string, state: string, link?: boolean): Promise<AuthResult>;
258
+ /**
259
+ * Sends an MFA challenge
260
+ *
261
+ * @param challengeId - MFA challenge ID
262
+ * @param method - MFA method
263
+ * @returns Promise resolving when challenge is sent
264
+ */
265
+ /**
266
+ * Note: MFA challenge sending is not available in current tenant-sdk.
267
+ * @deprecated Use verifyMFA instead
268
+ */
269
+ sendMFAChallenge(challengeId: string, method: MFAMethod): Promise<void>;
270
+ /**
271
+ * Verifies an MFA challenge
272
+ *
273
+ * @param challengeId - MFA challenge ID
274
+ * @param code - Verification code
275
+ * @param method - MFA method
276
+ * @returns Promise resolving to authentication result
277
+ */
278
+ verifyMFA(code: string, sessionId: string): Promise<AuthResult>;
279
+ /**
280
+ * Requests password reset
281
+ *
282
+ * @param request - Password reset request
283
+ * @returns Promise resolving when reset request is sent
284
+ */
285
+ requestPasswordReset(request: PasswordResetRequest): Promise<void>;
286
+ /**
287
+ * Resets password with token
288
+ *
289
+ * @param resetData - Password reset data
290
+ * @returns Promise resolving to authentication result
291
+ */
292
+ resetPassword(resetData: PasswordResetData): Promise<AuthResult>;
293
+ /**
294
+ * Gets current access token
295
+ *
296
+ * @returns Promise resolving to access token or null
297
+ */
298
+ getAccessToken(): Promise<string | null>;
299
+ /**
300
+ * Checks if user is authenticated
301
+ *
302
+ * @returns Promise resolving to authentication status
303
+ */
304
+ isAuthenticated(): Promise<boolean>;
305
+ /**
306
+ * Gets current user information
307
+ *
308
+ * @returns Promise resolving to user info or null
309
+ */
310
+ getUserInfo(): Promise<User | null>;
311
+ /**
312
+ * Refreshes access tokens
313
+ *
314
+ * @returns Promise resolving when tokens are refreshed
315
+ */
316
+ refreshTokens(): Promise<void>;
317
+ /**
318
+ * Logs out the user
319
+ *
320
+ * @returns Promise resolving when logout is complete
321
+ */
322
+ logout(): Promise<void>;
323
+ /**
324
+ * Gets logout URL
325
+ *
326
+ * @returns Promise resolving to logout URL
327
+ */
328
+ getLogoutUrl(): Promise<string>;
329
+ }
330
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/auth/client.ts"],"names":[],"mappings":"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"}