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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,qCAAqC,EAAE,MAAM,EAAE,CAAC;IAChD,qCAAqC,EAAE,MAAM,EAAE,CAAC;IAChD,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,QAAQ;IAEjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;gBADN,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,WAAW;IAG7B;;;;;;;;;;;;;;;OAeG;IACH,mBAAmB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM;IAqBlE;;;;;;;;;;;;;;;;OAgBG;IACG,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,GACL,OAAO,CAAC,aAAa,CAAC;IA8BzB;;;;;;;OAOG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAetE;;;;;;;;OAQG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IASzD;;;;;;;OAOG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,cAAc,GAAG,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjG;;;;;;;;;;OAUG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IAcF;;;;;;;;;OASG;IACG,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKxD;;;;;;;;OAQG;IACG,OAAO,IAAI,OAAO,CAAC;QACvB,IAAI,EAAE,KAAK,CAAC;YACV,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;SACX,CAAC,CAAC;KACJ,CAAC;CAIH;AAuCD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAUD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -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
|
-
|
|
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;
|
|
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.
|
|
4
|
-
"description": "Shared authentication SDK for Win Portal applications
|
|
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": [
|