win-portal-auth-sdk 1.2.1 → 1.3.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.
Files changed (38) hide show
  1. package/README.md +102 -9
  2. package/dist/client/api/auth.api.d.ts +25 -1
  3. package/dist/client/api/auth.api.d.ts.map +1 -1
  4. package/dist/client/api/auth.api.js +30 -1
  5. package/dist/client/api/files.api.d.ts +0 -1
  6. package/dist/client/api/files.api.d.ts.map +1 -1
  7. package/dist/client/api/index.d.ts +2 -0
  8. package/dist/client/api/index.d.ts.map +1 -1
  9. package/dist/client/api/index.js +3 -1
  10. package/dist/client/api/license.api.d.ts +74 -0
  11. package/dist/client/api/license.api.d.ts.map +1 -0
  12. package/dist/client/api/license.api.js +50 -0
  13. package/dist/client/api/system-config.api.d.ts +11 -1
  14. package/dist/client/api/system-config.api.d.ts.map +1 -1
  15. package/dist/client/api/system-config.api.js +21 -0
  16. package/dist/client/auth-client.d.ts +278 -1
  17. package/dist/client/auth-client.d.ts.map +1 -1
  18. package/dist/client/auth-client.js +705 -10
  19. package/dist/client/index.d.ts +2 -0
  20. package/dist/client/index.d.ts.map +1 -1
  21. package/dist/client/index.js +15 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +5 -0
  25. package/dist/types/auth.types.d.ts +9 -0
  26. package/dist/types/auth.types.d.ts.map +1 -1
  27. package/dist/types/index.d.ts +18 -0
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/types/system-config.types.d.ts +37 -0
  30. package/dist/types/system-config.types.d.ts.map +1 -1
  31. package/dist/utils/logger.d.ts +23 -0
  32. package/dist/utils/logger.d.ts.map +1 -0
  33. package/dist/utils/logger.js +49 -0
  34. package/dist/utils/token-utils.d.ts +60 -0
  35. package/dist/utils/token-utils.d.ts.map +1 -0
  36. package/dist/utils/token-utils.js +116 -0
  37. package/package.json +1 -2
  38. package/TYPE_SAFETY.md +0 -97
@@ -2,4 +2,6 @@
2
2
  * Client exports for frontend applications
3
3
  */
4
4
  export { AuthClient } from './auth-client';
5
+ export type { RefreshTokenCallbacks, AutomaticRefreshOptions, SessionExpirationCallbacks, SessionExpirationOptions, InactivityCallbacks, InactivityDetectionOptions, } from './auth-client';
6
+ export * from './api';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,cAAc,OAAO,CAAC"}
@@ -2,7 +2,22 @@
2
2
  /**
3
3
  * Client exports for frontend applications
4
4
  */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
5
19
  Object.defineProperty(exports, "__esModule", { value: true });
6
20
  exports.AuthClient = void 0;
7
21
  var auth_client_1 = require("./auth-client");
8
22
  Object.defineProperty(exports, "AuthClient", { enumerable: true, get: function () { return auth_client_1.AuthClient; } });
23
+ __exportStar(require("./api"), exports);
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@
7
7
  export * from './types';
8
8
  export * from './client';
9
9
  export * from './middleware';
10
+ export * from './utils/token-utils';
11
+ export { logger } from './utils/logger';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAG7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -20,9 +20,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
20
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.logger = void 0;
23
24
  // Types
24
25
  __exportStar(require("./types"), exports);
25
26
  // Client (Frontend & Backend)
26
27
  __exportStar(require("./client"), exports);
27
28
  // Middleware (Backend only - Express & NestJS)
28
29
  __exportStar(require("./middleware"), exports);
30
+ // Utils
31
+ __exportStar(require("./utils/token-utils"), exports);
32
+ var logger_1 = require("./utils/logger");
33
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
@@ -66,6 +66,15 @@ export interface User {
66
66
  export interface RefreshTokenRequest {
67
67
  refresh_token: string;
68
68
  }
69
+ /**
70
+ * Refresh Token Request with optional metadata
71
+ */
72
+ export interface RefreshTokenRequestWithMetadata {
73
+ refresh_token: string;
74
+ ip_address?: string;
75
+ user_agent?: string;
76
+ device_id?: string;
77
+ }
69
78
  /**
70
79
  * Authentication Tokens
71
80
  * Result of token refresh
@@ -1 +1 @@
1
- {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../src/types/auth.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../src/types/auth.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -67,6 +67,24 @@ export interface AuthSdkConfig {
67
67
  baseURL?: string;
68
68
  apiKeyHeader?: string;
69
69
  timeout?: number;
70
+ /**
71
+ * Advanced configuration options
72
+ * สำหรับปรับแต่ง internal behavior ของ SDK
73
+ */
74
+ advanced?: {
75
+ /**
76
+ * Activity throttle time (milliseconds)
77
+ * ระยะเวลาที่ throttle activity handler เพื่อลด CPU usage
78
+ * Default: 1000ms (1 second)
79
+ */
80
+ activityThrottleMs?: number;
81
+ /**
82
+ * Refresh token timeout (milliseconds)
83
+ * ระยะเวลาที่รอ refresh token request ก่อน timeout
84
+ * Default: 5000ms (5 seconds)
85
+ */
86
+ refreshTimeoutMs?: number;
87
+ };
70
88
  }
71
89
  /**
72
90
  * NestJS Module Configuration
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IAGf,iBAAiB,EAAE,OAAO,CAAC;IAG3B,qBAAqB,EAAE,MAAM,CAAC;IAG9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;IAGtD,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAGlB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IAGf,iBAAiB,EAAE,OAAO,CAAC;IAG3B,qBAAqB,EAAE,MAAM,CAAC;IAG9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;IAGtD,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAGlB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT;;;;WAIG;QACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,uBAAuB,CAAC"}
@@ -29,4 +29,41 @@ export interface SystemConfig {
29
29
  * Returns an object with key-value pairs for a category
30
30
  */
31
31
  export type SystemConfigByCategory = Record<string, any>;
32
+ /**
33
+ * Security JWT Configuration
34
+ * Configuration for JWT token settings
35
+ */
36
+ export interface SecurityJwtConfig {
37
+ jwt_secret: string;
38
+ access_token_expiry_minutes: number;
39
+ refresh_token_expiry_days: number;
40
+ automatic_refresh: boolean;
41
+ refresh_threshold_minutes: number;
42
+ rotate_refresh_token: boolean;
43
+ revoke_on_logout: boolean;
44
+ max_refresh_attempts: number;
45
+ }
46
+ /**
47
+ * Session Management Configuration
48
+ * Configuration for session timeout and expiration settings
49
+ */
50
+ export interface SessionManagementConfig {
51
+ inactivity: {
52
+ enabled: boolean;
53
+ timeout_duration: number;
54
+ timeout_unit: 'minutes' | 'hours' | 'days';
55
+ warning_minutes: number;
56
+ extend_on_activity: boolean;
57
+ };
58
+ lifetime: {
59
+ enabled: boolean;
60
+ max_duration: number;
61
+ max_unit: 'minutes' | 'hours' | 'days';
62
+ };
63
+ concurrent: {
64
+ max_sessions: number;
65
+ logout_inactive: boolean;
66
+ show_badge: boolean;
67
+ };
68
+ }
32
69
  //# sourceMappingURL=system-config.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-config.types.d.ts","sourceRoot":"","sources":["../../src/types/system-config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"system-config.types.d.ts","sourceRoot":"","sources":["../../src/types/system-config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,MAAM,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QAC3C,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;KACxC,CAAC;IACF,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Logger Utility
3
+ *
4
+ * @description Centralized logging utility for Auth SDK
5
+ * Supports different log levels and environment-based filtering
6
+ */
7
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
8
+ interface LoggerConfig {
9
+ enabled: boolean;
10
+ logLevel: LogLevel;
11
+ }
12
+ declare class Logger {
13
+ private config;
14
+ private shouldLog;
15
+ debug(...args: any[]): void;
16
+ info(...args: any[]): void;
17
+ warn(...args: any[]): void;
18
+ error(...args: any[]): void;
19
+ setConfig(config: Partial<LoggerConfig>): void;
20
+ }
21
+ export declare const logger: Logger;
22
+ export {};
23
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAGZ;IAEF,OAAO,CAAC,SAAS;IAUjB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAG/C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * Logger Utility
4
+ *
5
+ * @description Centralized logging utility for Auth SDK
6
+ * Supports different log levels and environment-based filtering
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.logger = void 0;
10
+ class Logger {
11
+ constructor() {
12
+ this.config = {
13
+ enabled: true,
14
+ logLevel: process.env.NODE_ENV === 'production' ? 'warn' : 'debug',
15
+ };
16
+ }
17
+ shouldLog(level) {
18
+ if (!this.config.enabled)
19
+ return false;
20
+ const levels = ['debug', 'info', 'warn', 'error'];
21
+ const currentLevelIndex = levels.indexOf(this.config.logLevel);
22
+ const messageLevelIndex = levels.indexOf(level);
23
+ return messageLevelIndex >= currentLevelIndex;
24
+ }
25
+ debug(...args) {
26
+ if (this.shouldLog('debug')) {
27
+ console.log('[AuthClient]', ...args);
28
+ }
29
+ }
30
+ info(...args) {
31
+ if (this.shouldLog('info')) {
32
+ console.log('[AuthClient]', ...args);
33
+ }
34
+ }
35
+ warn(...args) {
36
+ if (this.shouldLog('warn')) {
37
+ console.warn('[AuthClient]', ...args);
38
+ }
39
+ }
40
+ error(...args) {
41
+ if (this.shouldLog('error')) {
42
+ console.error('[AuthClient]', ...args);
43
+ }
44
+ }
45
+ setConfig(config) {
46
+ this.config = { ...this.config, ...config };
47
+ }
48
+ }
49
+ exports.logger = new Logger();
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Token Utilities
3
+ *
4
+ * @description Utilities สำหรับจัดการ JWT tokens
5
+ * - Decode JWT payload
6
+ * - ตรวจสอบ token expiration
7
+ * - คำนวณเวลาที่เหลือก่อนหมดอายุ
8
+ */
9
+ interface JwtPayload {
10
+ exp: number;
11
+ iat?: number;
12
+ sub?: string;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Decode JWT token (base64 decode only, ไม่ verify signature)
17
+ *
18
+ * @param token - JWT token string
19
+ * @returns Decoded payload หรือ null ถ้า decode ไม่ได้
20
+ */
21
+ export declare function decodeJwt(token: string): JwtPayload | null;
22
+ /**
23
+ * ตรวจสอบว่า token หมดอายุหรือยัง
24
+ *
25
+ * @param token - JWT token string
26
+ * @returns true ถ้า token หมดอายุแล้ว
27
+ */
28
+ export declare function isTokenExpired(token: string): boolean;
29
+ /**
30
+ * คำนวณเวลาที่เหลือก่อน token หมดอายุ (เป็นนาที)
31
+ *
32
+ * @param token - JWT token string
33
+ * @returns จำนวนนาทีที่เหลือ หรือ null ถ้า decode ไม่ได้
34
+ */
35
+ export declare function getTokenExpirationMinutes(token: string): number | null;
36
+ /**
37
+ * ตรวจสอบว่า token ใกล้หมดอายุหรือไม่ (ตาม threshold)
38
+ *
39
+ * @param token - JWT token string
40
+ * @param thresholdMinutes - จำนวนนาทีก่อนหมดอายุที่จะถือว่า "ใกล้หมดอายุ" (default: 5)
41
+ * @returns true ถ้า token ใกล้หมดอายุ
42
+ */
43
+ export declare function isTokenNearExpiration(token: string, thresholdMinutes?: number): boolean;
44
+ /**
45
+ * ตรวจสอบว่า token ยังใช้งานได้หรือไม่ (ยังไม่หมดอายุ)
46
+ *
47
+ * @param token - JWT token string
48
+ * @returns true ถ้า token ยังใช้งานได้
49
+ */
50
+ export declare function isTokenValid(token: string): boolean;
51
+ /**
52
+ * แปลง duration + unit เป็นนาที
53
+ *
54
+ * @param duration - จำนวน duration
55
+ * @param unit - หน่วยเวลา: 'minutes', 'hours', หรือ 'days'
56
+ * @returns จำนวนนาที
57
+ */
58
+ export declare function convertDurationToMinutes(duration: number, unit: 'minutes' | 'hours' | 'days'): number;
59
+ export {};
60
+ //# sourceMappingURL=token-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../src/utils/token-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAmB1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYtE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAU,GAAG,OAAO,CAO1F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAWrG"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * Token Utilities
4
+ *
5
+ * @description Utilities สำหรับจัดการ JWT tokens
6
+ * - Decode JWT payload
7
+ * - ตรวจสอบ token expiration
8
+ * - คำนวณเวลาที่เหลือก่อนหมดอายุ
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.convertDurationToMinutes = exports.isTokenValid = exports.isTokenNearExpiration = exports.getTokenExpirationMinutes = exports.isTokenExpired = exports.decodeJwt = void 0;
12
+ /**
13
+ * Decode JWT token (base64 decode only, ไม่ verify signature)
14
+ *
15
+ * @param token - JWT token string
16
+ * @returns Decoded payload หรือ null ถ้า decode ไม่ได้
17
+ */
18
+ function decodeJwt(token) {
19
+ try {
20
+ const parts = token.split('.');
21
+ if (parts.length !== 3) {
22
+ return null;
23
+ }
24
+ // Decode payload (second part)
25
+ const payload = parts[1];
26
+ // Support both browser and Node.js environments
27
+ const decoded = typeof window !== 'undefined'
28
+ ? atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
29
+ : Buffer.from(payload.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf-8');
30
+ return JSON.parse(decoded);
31
+ }
32
+ catch (error) {
33
+ console.error('[TokenUtils] Failed to decode JWT:', error);
34
+ return null;
35
+ }
36
+ }
37
+ exports.decodeJwt = decodeJwt;
38
+ /**
39
+ * ตรวจสอบว่า token หมดอายุหรือยัง
40
+ *
41
+ * @param token - JWT token string
42
+ * @returns true ถ้า token หมดอายุแล้ว
43
+ */
44
+ function isTokenExpired(token) {
45
+ const payload = decodeJwt(token);
46
+ if (!payload || !payload.exp) {
47
+ return true; // ถ้า decode ไม่ได้หรือไม่มี exp ถือว่าหมดอายุ
48
+ }
49
+ const expirationTime = payload.exp * 1000; // Convert to milliseconds
50
+ const now = Date.now();
51
+ return now >= expirationTime;
52
+ }
53
+ exports.isTokenExpired = isTokenExpired;
54
+ /**
55
+ * คำนวณเวลาที่เหลือก่อน token หมดอายุ (เป็นนาที)
56
+ *
57
+ * @param token - JWT token string
58
+ * @returns จำนวนนาทีที่เหลือ หรือ null ถ้า decode ไม่ได้
59
+ */
60
+ function getTokenExpirationMinutes(token) {
61
+ const payload = decodeJwt(token);
62
+ if (!payload || !payload.exp) {
63
+ return null;
64
+ }
65
+ const expirationTime = payload.exp * 1000; // Convert to milliseconds
66
+ const now = Date.now();
67
+ const remainingMs = expirationTime - now;
68
+ const remainingMinutes = Math.floor(remainingMs / (1000 * 60));
69
+ return remainingMinutes;
70
+ }
71
+ exports.getTokenExpirationMinutes = getTokenExpirationMinutes;
72
+ /**
73
+ * ตรวจสอบว่า token ใกล้หมดอายุหรือไม่ (ตาม threshold)
74
+ *
75
+ * @param token - JWT token string
76
+ * @param thresholdMinutes - จำนวนนาทีก่อนหมดอายุที่จะถือว่า "ใกล้หมดอายุ" (default: 5)
77
+ * @returns true ถ้า token ใกล้หมดอายุ
78
+ */
79
+ function isTokenNearExpiration(token, thresholdMinutes = 5) {
80
+ const remainingMinutes = getTokenExpirationMinutes(token);
81
+ if (remainingMinutes === null) {
82
+ return true; // ถ้า decode ไม่ได้ ถือว่าใกล้หมดอายุ
83
+ }
84
+ return remainingMinutes <= thresholdMinutes;
85
+ }
86
+ exports.isTokenNearExpiration = isTokenNearExpiration;
87
+ /**
88
+ * ตรวจสอบว่า token ยังใช้งานได้หรือไม่ (ยังไม่หมดอายุ)
89
+ *
90
+ * @param token - JWT token string
91
+ * @returns true ถ้า token ยังใช้งานได้
92
+ */
93
+ function isTokenValid(token) {
94
+ return !isTokenExpired(token);
95
+ }
96
+ exports.isTokenValid = isTokenValid;
97
+ /**
98
+ * แปลง duration + unit เป็นนาที
99
+ *
100
+ * @param duration - จำนวน duration
101
+ * @param unit - หน่วยเวลา: 'minutes', 'hours', หรือ 'days'
102
+ * @returns จำนวนนาที
103
+ */
104
+ function convertDurationToMinutes(duration, unit) {
105
+ switch (unit) {
106
+ case 'minutes':
107
+ return duration;
108
+ case 'hours':
109
+ return duration * 60;
110
+ case 'days':
111
+ return duration * 24 * 60;
112
+ default:
113
+ return duration; // fallback
114
+ }
115
+ }
116
+ exports.convertDurationToMinutes = convertDurationToMinutes;
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "win-portal-auth-sdk",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
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": [
8
8
  "dist",
9
9
  "README.md",
10
- "TYPE_SAFETY.md",
11
10
  "LICENSE"
12
11
  ],
13
12
  "repository": {
package/TYPE_SAFETY.md DELETED
@@ -1,97 +0,0 @@
1
- # Type Safety Guide
2
-
3
- ## Express Type Augmentation
4
-
5
- The SDK automatically extends Express's `Request` interface to include auth properties.
6
-
7
- ### What's Included
8
-
9
- ```typescript
10
- declare global {
11
- namespace Express {
12
- interface Request {
13
- user?: UserProfileResponseDto | null;
14
- token?: string | null;
15
- }
16
- }
17
- }
18
- ```
19
-
20
- ### Usage
21
-
22
- After installing the SDK, TypeScript will automatically recognize `req.user` and `req.token`:
23
-
24
- ```typescript
25
- import express from 'express';
26
- import { authMiddleware } from 'win-portal-auth-sdk';
27
-
28
- const app = express();
29
-
30
- app.use(
31
- authMiddleware({
32
- baseURL: process.env.API_URL,
33
- apiKey: process.env.API_KEY,
34
- }),
35
- );
36
-
37
- app.get('/profile', (req, res) => {
38
- // ✅ TypeScript knows about req.user
39
- if (req.user) {
40
- // ✅ Full IntelliSense for user properties
41
- res.json({
42
- email: req.user.email,
43
- name: req.user.displayName,
44
- permissions: req.user.permissions,
45
- });
46
- } else {
47
- res.status(401).json({ error: 'Not authenticated' });
48
- }
49
- });
50
- ```
51
-
52
- ### States
53
-
54
- - `undefined` - Middleware not applied to this route
55
- - `null` - Middleware applied but no token provided (when `optional: true`)
56
- - `UserProfileResponseDto` - Successfully authenticated
57
-
58
- ### Helper Functions
59
-
60
- For guaranteed non-null user:
61
-
62
- ```typescript
63
- import { requireAuth } from 'win-portal-auth-sdk';
64
-
65
- app.get('/protected', (req, res) => {
66
- const { user } = requireAuth(req);
67
- // ✅ user is guaranteed to be UserProfileResponseDto (not null)
68
- res.json({ email: user.email });
69
- });
70
- ```
71
-
72
- For optional auth:
73
-
74
- ```typescript
75
- import { getAuth } from 'win-portal-auth-sdk';
76
-
77
- app.get('/optional', (req, res) => {
78
- const { user, token } = getAuth(req);
79
-
80
- if (user) {
81
- res.json({ authenticated: true, email: user.email });
82
- } else {
83
- res.json({ authenticated: false });
84
- }
85
- });
86
- ```
87
-
88
- ## Benefits
89
-
90
- 1. **IntelliSense** - Full autocomplete for `req.user` properties
91
- 2. **Type Safety** - Compile-time errors for typos
92
- 3. **Better DX** - No need to cast or assert types manually
93
- 4. **Standard Pattern** - Follows Express best practices
94
-
95
- ## No Express Dependency
96
-
97
- The SDK does NOT depend on Express itself - it only augments the types when Express is present in your project. This keeps the SDK lightweight and flexible.