win-portal-auth-sdk 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -64,10 +64,23 @@ import authClient from '@/lib/auth-client';
64
64
 
65
65
  // Authentication
66
66
  const loginResult = await authClient.auth.login('user@example.com', 'password');
67
+
68
+ // ✅ Set JWT token with explicit type (recommended for better performance)
69
+ authClient.setToken(loginResult.token, 'jwt');
70
+
71
+ // Or use hybrid mode (backward compatible)
72
+ authClient.setToken(loginResult.token); // defaults to 'jwt'
73
+ authClient.setAuthType('hybrid'); // will try JWT first, then OAuth
74
+
67
75
  const profile = await authClient.auth.profile();
68
76
  const refreshed = await authClient.auth.refresh(refreshToken);
69
77
  await authClient.auth.logout();
70
78
 
79
+ // OAuth Token Usage
80
+ // ✅ Set OAuth token with explicit type (recommended for better performance)
81
+ const oauthToken = await authClient.oauth.exchangeCode(code, codeVerifier);
82
+ authClient.setToken(oauthToken.access_token, 'oauth');
83
+
71
84
  // TOTP (Two-Factor Authentication)
72
85
  // 1. Setup TOTP for user
73
86
  const totpSetup = await authClient.auth.setupTotp('My App');
@@ -329,10 +342,90 @@ const client = new AuthClient({
329
342
 
330
343
  #### Utility Methods
331
344
 
345
+ - `setToken(token, type?)` - Set authentication token
346
+ - `type`: `'jwt'` (default) | `'oauth'` | `'hybrid'`
347
+ - Recommended to specify type for better performance
348
+ - `getAuthType()` - Get current authentication type
349
+ - `setAuthType(type)` - Change authentication type
350
+ - `clearToken()` - Clear authentication token
351
+ - `getTokenMasked()` - Get masked token for display
332
352
  - `setApiKey(apiKey)` - Update API key
333
353
  - `getApiKeyMasked()` - Get masked API key for display
334
354
  - `getAxiosInstance()` - Get underlying axios instance
335
355
 
356
+ ## Authentication Types
357
+
358
+ The SDK supports three authentication types through the `X-Auth-Type` header:
359
+
360
+ ### JWT Authentication (Recommended for internal users)
361
+
362
+ ```typescript
363
+ // Login and get JWT token
364
+ const session = await authClient.auth.login('user@example.com', 'password');
365
+
366
+ // ✅ Specify 'jwt' for best performance (fast path validation)
367
+ authClient.setToken(session.token, 'jwt');
368
+
369
+ // All subsequent requests will include:
370
+ // Authorization: Bearer <jwt_token>
371
+ // X-Auth-Type: jwt
372
+ ```
373
+
374
+ **Use JWT when:**
375
+
376
+ - User logs in with username/password
377
+ - Internal application users
378
+ - Need session-based authentication
379
+
380
+ ### OAuth Authentication (Recommended for external apps)
381
+
382
+ ```typescript
383
+ // Exchange authorization code for tokens
384
+ const tokens = await authClient.oauth.exchangeCode(code, codeVerifier);
385
+
386
+ // ✅ Specify 'oauth' for best performance (fast path validation)
387
+ authClient.setToken(tokens.access_token, 'oauth');
388
+
389
+ // All subsequent requests will include:
390
+ // Authorization: Bearer <oauth_access_token>
391
+ // X-Auth-Type: oauth
392
+ ```
393
+
394
+ **Use OAuth when:**
395
+
396
+ - Third-party application integration
397
+ - User consent-based access
398
+ - Need scope-based permissions
399
+
400
+ ### Hybrid Mode (Backward compatible)
401
+
402
+ ```typescript
403
+ // Don't know token type or want automatic detection
404
+ authClient.setToken(someToken, 'hybrid');
405
+
406
+ // All subsequent requests will include:
407
+ // Authorization: Bearer <token>
408
+ // X-Auth-Type: hybrid
409
+
410
+ // API will try JWT first, then fallback to OAuth
411
+ ```
412
+
413
+ **Use Hybrid when:**
414
+
415
+ - Backward compatibility needed
416
+ - Token type is unknown
417
+ - Migrating from old implementation
418
+
419
+ ### Performance Comparison
420
+
421
+ | Auth Type | Validation | Performance | Use Case |
422
+ | --------- | -------------------- | ------------------------- | ------------------------------ |
423
+ | `jwt` | JWT only | ⚡ Fast (1 validation) | Internal users, password login |
424
+ | `oauth` | OAuth only | ⚡ Fast (1 validation) | External apps, OAuth flow |
425
+ | `hybrid` | JWT → OAuth fallback | 🐌 Slower (2 validations) | Unknown token type |
426
+
427
+ **💡 Tip:** Always specify `'jwt'` or `'oauth'` explicitly for ~50% faster authentication!
428
+
336
429
  ## Security Best Practices
337
430
 
338
431
  1. **Never commit API keys** - Use environment variables
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.api.d.ts","sourceRoot":"","sources":["../../../src/client/api/oauth.api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.api.d.ts","sourceRoot":"","sources":["../../../src/client/api/oauth.api.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,13 @@ class OAuthAPI {
77
77
  if (options.codeVerifier) {
78
78
  data.code_verifier = options.codeVerifier;
79
79
  }
80
+ const baseURL = this.client['client'].defaults.baseURL;
81
+ console.log('[OAuth] Exchanging code for token:', {
82
+ endpoint: `${baseURL}/oauth/token`,
83
+ clientId: this.config.clientId,
84
+ redirectUri: this.config.redirectUri,
85
+ hasCodeVerifier: !!options.codeVerifier,
86
+ });
80
87
  const response = await this.client.post('/oauth/token', data);
81
88
  return response.data;
82
89
  }
@@ -13,6 +13,7 @@ export declare class AuthClient {
13
13
  private apiKey;
14
14
  private apiKeyHeader;
15
15
  private token;
16
+ private authType;
16
17
  readonly auth: AuthAPI;
17
18
  readonly health: HealthAPI;
18
19
  readonly systemConfig: SystemConfigAPI;
@@ -64,8 +65,33 @@ export declare class AuthClient {
64
65
  getApiKeyMasked(): string;
65
66
  /**
66
67
  * Set JWT token for authenticated requests
68
+ *
69
+ * @param token - JWT access token
70
+ * @param type - Token type: 'jwt' (default), 'oauth', or 'hybrid'
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // JWT token from /auth/login
75
+ * authClient.setToken(session.token, 'jwt');
76
+ *
77
+ * // OAuth access token
78
+ * authClient.setToken(oauthToken, 'oauth');
79
+ *
80
+ * // Auto-detect (hybrid mode)
81
+ * authClient.setToken(token);
82
+ * ```
83
+ */
84
+ setToken(token: string, type?: 'jwt' | 'oauth' | 'hybrid'): void;
85
+ /**
86
+ * Get current token type
87
+ */
88
+ getAuthType(): 'jwt' | 'oauth' | 'hybrid';
89
+ /**
90
+ * Set authentication type
91
+ *
92
+ * @param type - Authentication type: 'jwt', 'oauth', or 'hybrid'
67
93
  */
68
- setToken(token: string): void;
94
+ setAuthType(type: 'jwt' | 'oauth' | 'hybrid'): void;
69
95
  /**
70
96
  * Get current token (masked)
71
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../src/client/auth-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEnH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAuB;IAGpC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,YAAY,EAAE,eAAe,CAAC;IAC9C,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,IAAI,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAEZ,MAAM,EAAE,aAAa;IAoDjC;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI1C;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIvF;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIpG;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAInG;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIrG;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI1F;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,eAAe,IAAI,MAAM;IAMzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,cAAc,IAAI,MAAM;IAOxB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,gBAAgB,IAAI,aAAa;CAGlC"}
1
+ {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../src/client/auth-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEnH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAwC;IAGxD,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,YAAY,EAAE,eAAe,CAAC;IAC9C,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,IAAI,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAEZ,MAAM,EAAE,aAAa;IA4DjC;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAW1C;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIvF;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIpG;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAInG;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIrG;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI1F;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,eAAe,IAAI,MAAM;IAMzB;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,OAAO,GAAG,QAAgB,GAAG,IAAI;IAMvE;;OAEG;IACH,WAAW,IAAI,KAAK,GAAG,OAAO,GAAG,QAAQ;IAIzC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;IAKnD;;OAEG;IACH,cAAc,IAAI,MAAM;IAOxB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,gBAAgB,IAAI,aAAa;CAGlC"}
@@ -16,8 +16,14 @@ const api_1 = require("./api");
16
16
  class AuthClient {
17
17
  constructor(config) {
18
18
  this.token = null;
19
+ this.authType = 'hybrid'; // Default to hybrid
19
20
  this.apiKey = config.apiKey;
20
21
  this.apiKeyHeader = config.apiKeyHeader || 'X-API-Key';
22
+ console.log('[AuthClient] Initializing with config:', {
23
+ baseURL: config.baseURL,
24
+ timeout: config.timeout,
25
+ apiKeyHeader: this.apiKeyHeader,
26
+ });
21
27
  this.client = axios_1.default.create({
22
28
  baseURL: config.baseURL,
23
29
  timeout: config.timeout || 30000,
@@ -32,6 +38,8 @@ class AuthClient {
32
38
  // Inject JWT token if available
33
39
  if (this.token) {
34
40
  requestConfig.headers['Authorization'] = `Bearer ${this.token}`;
41
+ // ✅ Inject X-Auth-Type header for better performance
42
+ requestConfig.headers['X-Auth-Type'] = this.authType;
35
43
  }
36
44
  }
37
45
  return requestConfig;
@@ -69,6 +77,12 @@ class AuthClient {
69
77
  * ```
70
78
  */
71
79
  initializeOAuth(config) {
80
+ console.log('[AuthClient] Initializing OAuth with:', {
81
+ clientId: config.clientId,
82
+ redirectUri: config.redirectUri,
83
+ scope: config.scope,
84
+ baseURL: this.client.defaults.baseURL,
85
+ });
72
86
  this.oauth = new api_1.OAuthAPI(this, config);
73
87
  }
74
88
  /**
@@ -118,9 +132,41 @@ class AuthClient {
118
132
  }
119
133
  /**
120
134
  * Set JWT token for authenticated requests
135
+ *
136
+ * @param token - JWT access token
137
+ * @param type - Token type: 'jwt' (default), 'oauth', or 'hybrid'
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * // JWT token from /auth/login
142
+ * authClient.setToken(session.token, 'jwt');
143
+ *
144
+ * // OAuth access token
145
+ * authClient.setToken(oauthToken, 'oauth');
146
+ *
147
+ * // Auto-detect (hybrid mode)
148
+ * authClient.setToken(token);
149
+ * ```
121
150
  */
122
- setToken(token) {
151
+ setToken(token, type = 'jwt') {
123
152
  this.token = token;
153
+ this.authType = type;
154
+ console.log(`[AuthClient] Token set with type: ${type}`);
155
+ }
156
+ /**
157
+ * Get current token type
158
+ */
159
+ getAuthType() {
160
+ return this.authType;
161
+ }
162
+ /**
163
+ * Set authentication type
164
+ *
165
+ * @param type - Authentication type: 'jwt', 'oauth', or 'hybrid'
166
+ */
167
+ setAuthType(type) {
168
+ this.authType = type;
169
+ console.log(`[AuthClient] Auth type changed to: ${type}`);
124
170
  }
125
171
  /**
126
172
  * Get current token (masked)
@@ -138,6 +184,7 @@ class AuthClient {
138
184
  */
139
185
  clearToken() {
140
186
  this.token = null;
187
+ this.authType = 'hybrid';
141
188
  }
142
189
  /**
143
190
  * Get axios instance for advanced usage
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "win-portal-auth-sdk",
3
- "version": "1.1.1",
4
- "description": "Shared authentication SDK for Win Portal applications using API Key authentication",
3
+ "version": "1.2.1",
4
+ "description": "Shared authentication SDK for Win Portal applications with JWT and OAuth support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [