@egain/ai-agent-sdk 0.1.0
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 +295 -0
- package/dist/browser.js +22739 -0
- package/dist/core/AiAgent.d.ts +1126 -0
- package/dist/core/AiAgent.d.ts.map +1 -0
- package/dist/core/AiAgent.js +2037 -0
- package/dist/core/AiAgent.js.map +1 -0
- package/dist/core/api/ApiHelper.d.ts +433 -0
- package/dist/core/api/ApiHelper.d.ts.map +1 -0
- package/dist/core/api/ApiHelper.js +689 -0
- package/dist/core/api/ApiHelper.js.map +1 -0
- package/dist/core/api/CacheAdapter.d.ts +295 -0
- package/dist/core/api/CacheAdapter.d.ts.map +1 -0
- package/dist/core/api/CacheAdapter.js +298 -0
- package/dist/core/api/CacheAdapter.js.map +1 -0
- package/dist/core/auth/AnonymousAuthStrategy.d.ts +87 -0
- package/dist/core/auth/AnonymousAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/AnonymousAuthStrategy.js +257 -0
- package/dist/core/auth/AnonymousAuthStrategy.js.map +1 -0
- package/dist/core/auth/AuthProvider.d.ts +13 -0
- package/dist/core/auth/AuthProvider.d.ts.map +1 -0
- package/dist/core/auth/AuthProvider.js +2 -0
- package/dist/core/auth/AuthProvider.js.map +1 -0
- package/dist/core/auth/AuthStrategy.d.ts +74 -0
- package/dist/core/auth/AuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/AuthStrategy.js +2 -0
- package/dist/core/auth/AuthStrategy.js.map +1 -0
- package/dist/core/auth/AuthenticationService.d.ts +226 -0
- package/dist/core/auth/AuthenticationService.d.ts.map +1 -0
- package/dist/core/auth/AuthenticationService.js +344 -0
- package/dist/core/auth/AuthenticationService.js.map +1 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts +62 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.js +78 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.js.map +1 -0
- package/dist/core/auth/PKCEAuthStrategy.d.ts +136 -0
- package/dist/core/auth/PKCEAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/PKCEAuthStrategy.js +409 -0
- package/dist/core/auth/PKCEAuthStrategy.js.map +1 -0
- package/dist/core/auth/PreAuthStrategy.d.ts +101 -0
- package/dist/core/auth/PreAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/PreAuthStrategy.js +216 -0
- package/dist/core/auth/PreAuthStrategy.js.map +1 -0
- package/dist/core/auth/msal-browser.js +19683 -0
- package/dist/core/auth/msal-loader.d.ts +14 -0
- package/dist/core/auth/msal-loader.d.ts.map +1 -0
- package/dist/core/auth/msal-loader.js +43 -0
- package/dist/core/auth/msal-loader.js.map +1 -0
- package/dist/core/connection/Connection.d.ts +168 -0
- package/dist/core/connection/Connection.d.ts.map +1 -0
- package/dist/core/connection/Connection.js +290 -0
- package/dist/core/connection/Connection.js.map +1 -0
- package/dist/core/connection/ConnectionState.d.ts +11 -0
- package/dist/core/connection/ConnectionState.d.ts.map +1 -0
- package/dist/core/connection/ConnectionState.js +12 -0
- package/dist/core/connection/ConnectionState.js.map +1 -0
- package/dist/core/connection/Transport.d.ts +98 -0
- package/dist/core/connection/Transport.d.ts.map +1 -0
- package/dist/core/connection/Transport.js +27 -0
- package/dist/core/connection/Transport.js.map +1 -0
- package/dist/core/connection/WebSocketTransport.d.ts +65 -0
- package/dist/core/connection/WebSocketTransport.d.ts.map +1 -0
- package/dist/core/connection/WebSocketTransport.js +177 -0
- package/dist/core/connection/WebSocketTransport.js.map +1 -0
- package/dist/core/errors/SDKError.d.ts +27 -0
- package/dist/core/errors/SDKError.d.ts.map +1 -0
- package/dist/core/errors/SDKError.js +43 -0
- package/dist/core/errors/SDKError.js.map +1 -0
- package/dist/core/events/EventEmitter.d.ts +120 -0
- package/dist/core/events/EventEmitter.d.ts.map +1 -0
- package/dist/core/events/EventEmitter.js +183 -0
- package/dist/core/events/EventEmitter.js.map +1 -0
- package/dist/core/logging/LogLevel.d.ts +33 -0
- package/dist/core/logging/LogLevel.d.ts.map +1 -0
- package/dist/core/logging/LogLevel.js +40 -0
- package/dist/core/logging/LogLevel.js.map +1 -0
- package/dist/core/logging/Logger.d.ts +120 -0
- package/dist/core/logging/Logger.d.ts.map +1 -0
- package/dist/core/logging/Logger.js +204 -0
- package/dist/core/logging/Logger.js.map +1 -0
- package/dist/core/logging/globalLogger.d.ts +8 -0
- package/dist/core/logging/globalLogger.d.ts.map +1 -0
- package/dist/core/logging/globalLogger.js +12 -0
- package/dist/core/logging/globalLogger.js.map +1 -0
- package/dist/core/logging/types.d.ts +45 -0
- package/dist/core/logging/types.d.ts.map +1 -0
- package/dist/core/logging/types.js +2 -0
- package/dist/core/logging/types.js.map +1 -0
- package/dist/core/message/BaseMessageHandler.d.ts +208 -0
- package/dist/core/message/BaseMessageHandler.d.ts.map +1 -0
- package/dist/core/message/BaseMessageHandler.js +155 -0
- package/dist/core/message/BaseMessageHandler.js.map +1 -0
- package/dist/core/message/Message.d.ts +69 -0
- package/dist/core/message/Message.d.ts.map +1 -0
- package/dist/core/message/Message.js +131 -0
- package/dist/core/message/Message.js.map +1 -0
- package/dist/core/message/MessageProcessor.d.ts +51 -0
- package/dist/core/message/MessageProcessor.d.ts.map +1 -0
- package/dist/core/message/MessageProcessor.js +123 -0
- package/dist/core/message/MessageProcessor.js.map +1 -0
- package/dist/core/message/MessageTypes.d.ts +123 -0
- package/dist/core/message/MessageTypes.d.ts.map +1 -0
- package/dist/core/message/MessageTypes.js +106 -0
- package/dist/core/message/MessageTypes.js.map +1 -0
- package/dist/core/message/Transcript.d.ts +373 -0
- package/dist/core/message/Transcript.d.ts.map +1 -0
- package/dist/core/message/Transcript.js +355 -0
- package/dist/core/message/Transcript.js.map +1 -0
- package/dist/core/message/handlers/AgentMessageHandler.d.ts +26 -0
- package/dist/core/message/handlers/AgentMessageHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/AgentMessageHandler.js +130 -0
- package/dist/core/message/handlers/AgentMessageHandler.js.map +1 -0
- package/dist/core/message/handlers/ChatHistoryHandler.d.ts +12 -0
- package/dist/core/message/handlers/ChatHistoryHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/ChatHistoryHandler.js +49 -0
- package/dist/core/message/handlers/ChatHistoryHandler.js.map +1 -0
- package/dist/core/message/handlers/ErrorMessageHandler.d.ts +12 -0
- package/dist/core/message/handlers/ErrorMessageHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/ErrorMessageHandler.js +49 -0
- package/dist/core/message/handlers/ErrorMessageHandler.js.map +1 -0
- package/dist/core/message/handlers/HeartbeatHandler.d.ts +12 -0
- package/dist/core/message/handlers/HeartbeatHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/HeartbeatHandler.js +46 -0
- package/dist/core/message/handlers/HeartbeatHandler.js.map +1 -0
- package/dist/core/message/handlers/TokenRefreshHandler.d.ts +30 -0
- package/dist/core/message/handlers/TokenRefreshHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/TokenRefreshHandler.js +84 -0
- package/dist/core/message/handlers/TokenRefreshHandler.js.map +1 -0
- package/dist/core/message/types.d.ts +107 -0
- package/dist/core/message/types.d.ts.map +1 -0
- package/dist/core/message/types.js +30 -0
- package/dist/core/message/types.js.map +1 -0
- package/dist/core/platform/HookContract.d.ts +112 -0
- package/dist/core/platform/HookContract.d.ts.map +1 -0
- package/dist/core/platform/HookContract.js +13 -0
- package/dist/core/platform/HookContract.js.map +1 -0
- package/dist/core/platform/PlatformComponentService.d.ts +40 -0
- package/dist/core/platform/PlatformComponentService.d.ts.map +1 -0
- package/dist/core/platform/PlatformComponentService.js +12 -0
- package/dist/core/platform/PlatformComponentService.js.map +1 -0
- package/dist/core/platform/PlatformScriptLoader.d.ts +41 -0
- package/dist/core/platform/PlatformScriptLoader.d.ts.map +1 -0
- package/dist/core/platform/PlatformScriptLoader.js +110 -0
- package/dist/core/platform/PlatformScriptLoader.js.map +1 -0
- package/dist/core/polyfills.d.ts +16 -0
- package/dist/core/polyfills.d.ts.map +1 -0
- package/dist/core/polyfills.js +168 -0
- package/dist/core/polyfills.js.map +1 -0
- package/dist/core/portal-initializer/PortalInitializer.d.ts +234 -0
- package/dist/core/portal-initializer/PortalInitializer.d.ts.map +1 -0
- package/dist/core/portal-initializer/PortalInitializer.js +636 -0
- package/dist/core/portal-initializer/PortalInitializer.js.map +1 -0
- package/dist/core/queue/MessageQueue.d.ts +277 -0
- package/dist/core/queue/MessageQueue.d.ts.map +1 -0
- package/dist/core/queue/MessageQueue.js +291 -0
- package/dist/core/queue/MessageQueue.js.map +1 -0
- package/dist/core/types/PortalTypes.d.ts +51 -0
- package/dist/core/types/PortalTypes.d.ts.map +1 -0
- package/dist/core/types/PortalTypes.js +8 -0
- package/dist/core/types/PortalTypes.js.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { AuthStrategy, AuthStrategyInitializeOptions } from './AuthStrategy.js';
|
|
2
|
+
/**
|
|
3
|
+
* Callback type for token expiring notification
|
|
4
|
+
*/
|
|
5
|
+
export type TokenExpiringCallback = (expiresAt: number) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for pre-auth authentication strategy
|
|
8
|
+
*/
|
|
9
|
+
export interface PreAuthConfig {
|
|
10
|
+
/**
|
|
11
|
+
* Access token to use directly
|
|
12
|
+
*/
|
|
13
|
+
accessToken: string;
|
|
14
|
+
/**
|
|
15
|
+
* Optional token refresh function
|
|
16
|
+
* If provided, will be called when token needs to be refreshed
|
|
17
|
+
*/
|
|
18
|
+
refreshTokenFn?: () => Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Buffer time in milliseconds before token expiry to trigger the expiring event
|
|
21
|
+
* @default 180000 (3 minutes)
|
|
22
|
+
*/
|
|
23
|
+
expiryBufferMs?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Pre-auth authentication strategy
|
|
27
|
+
* Uses a pre-obtained access token without completing authentication flow
|
|
28
|
+
*/
|
|
29
|
+
export declare class PreAuthStrategy implements AuthStrategy {
|
|
30
|
+
private readonly config;
|
|
31
|
+
private currentToken;
|
|
32
|
+
private postAuthentication?;
|
|
33
|
+
private isAuthenticatedFlag;
|
|
34
|
+
private deploymentInfo?;
|
|
35
|
+
private expiryTimer?;
|
|
36
|
+
private tokenExpiringCallback?;
|
|
37
|
+
private expiryBufferMs;
|
|
38
|
+
constructor(config: PreAuthConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Decode a JWT token and extract the payload
|
|
41
|
+
* Does not verify the signature - only extracts the claims
|
|
42
|
+
* @param token - The JWT token string
|
|
43
|
+
* @returns The decoded payload or null if decoding fails
|
|
44
|
+
*/
|
|
45
|
+
private decodeJwt;
|
|
46
|
+
/**
|
|
47
|
+
* Get the expiration time from the token
|
|
48
|
+
* @param token - The JWT token string
|
|
49
|
+
* @returns Expiration timestamp in milliseconds, or null if not available
|
|
50
|
+
*/
|
|
51
|
+
private getTokenExpiry;
|
|
52
|
+
/**
|
|
53
|
+
* Schedule the token expiring event
|
|
54
|
+
* Fires at (expiry - buffer) time
|
|
55
|
+
* @param token - The JWT token to schedule expiry for
|
|
56
|
+
*/
|
|
57
|
+
private scheduleExpiryEvent;
|
|
58
|
+
/**
|
|
59
|
+
* Cancel the expiry timer
|
|
60
|
+
*/
|
|
61
|
+
private cancelExpiryTimer;
|
|
62
|
+
/**
|
|
63
|
+
* Set the callback to be called when token is about to expire
|
|
64
|
+
* @param callback - Function to call when token is expiring
|
|
65
|
+
*/
|
|
66
|
+
setTokenExpiringCallback(callback: TokenExpiringCallback): void;
|
|
67
|
+
/**
|
|
68
|
+
* Initialize the pre-auth authentication strategy
|
|
69
|
+
* Ensures the token is available and ready to use
|
|
70
|
+
*/
|
|
71
|
+
initialize(options?: AuthStrategyInitializeOptions): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Authenticate using pre-auth token
|
|
74
|
+
*/
|
|
75
|
+
authenticate(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Check if the user is currently authenticated
|
|
78
|
+
*/
|
|
79
|
+
isAuthenticated(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Get the access token
|
|
82
|
+
* If refresh function is provided and token is expired, attempts to refresh
|
|
83
|
+
*/
|
|
84
|
+
getToken(): Promise<string>;
|
|
85
|
+
/**
|
|
86
|
+
* Update the access token
|
|
87
|
+
* Cancels existing expiry timer and schedules new one based on new token
|
|
88
|
+
* If authenticated, calls postAuthentication callback with the new token
|
|
89
|
+
* @param token - The new access token
|
|
90
|
+
*/
|
|
91
|
+
updateToken(token: string): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Refresh the token using the provided refresh function
|
|
94
|
+
*/
|
|
95
|
+
refreshToken(): Promise<string>;
|
|
96
|
+
/**
|
|
97
|
+
* Cleanup resources
|
|
98
|
+
*/
|
|
99
|
+
cleanup(): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=PreAuthStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreAuthStrategy.d.ts","sourceRoot":"","sources":["../../../src/core/auth/PreAuthStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAE5G;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAOhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAStC,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAC,CAA6B;IACxD,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAgC;IACpD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,cAAc,CAAS;gBAEF,MAAM,EAAE,aAAa;IAKlD;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAgCjB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;OAGG;IACH,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAQ/D;;;OAGG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCxE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBnC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAQrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer time before token expiry to trigger the expiring event (3 minutes in ms)
|
|
3
|
+
*/
|
|
4
|
+
const TOKEN_EXPIRY_BUFFER_MS = 3 * 60 * 1000;
|
|
5
|
+
/**
|
|
6
|
+
* Pre-auth authentication strategy
|
|
7
|
+
* Uses a pre-obtained access token without completing authentication flow
|
|
8
|
+
*/
|
|
9
|
+
export class PreAuthStrategy {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.isAuthenticatedFlag = false;
|
|
13
|
+
this.currentToken = config.accessToken;
|
|
14
|
+
this.expiryBufferMs = config.expiryBufferMs ?? TOKEN_EXPIRY_BUFFER_MS;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Decode a JWT token and extract the payload
|
|
18
|
+
* Does not verify the signature - only extracts the claims
|
|
19
|
+
* @param token - The JWT token string
|
|
20
|
+
* @returns The decoded payload or null if decoding fails
|
|
21
|
+
*/
|
|
22
|
+
decodeJwt(token) {
|
|
23
|
+
try {
|
|
24
|
+
// JWT format: header.payload.signature
|
|
25
|
+
const parts = token.split('.');
|
|
26
|
+
if (parts.length !== 3) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Decode the payload (second part)
|
|
30
|
+
const payload = parts[1];
|
|
31
|
+
// Handle URL-safe base64 encoding
|
|
32
|
+
const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
|
|
33
|
+
// Decode base64 - works in both browser and Node.js
|
|
34
|
+
let decoded;
|
|
35
|
+
if (typeof atob === 'function') {
|
|
36
|
+
// Browser environment
|
|
37
|
+
decoded = atob(base64);
|
|
38
|
+
}
|
|
39
|
+
else if (typeof Buffer !== 'undefined') {
|
|
40
|
+
// Node.js environment
|
|
41
|
+
decoded = Buffer.from(base64, 'base64').toString('utf-8');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return JSON.parse(decoded);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Token is not a valid JWT or decoding failed
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the expiration time from the token
|
|
55
|
+
* @param token - The JWT token string
|
|
56
|
+
* @returns Expiration timestamp in milliseconds, or null if not available
|
|
57
|
+
*/
|
|
58
|
+
getTokenExpiry(token) {
|
|
59
|
+
const payload = this.decodeJwt(token);
|
|
60
|
+
if (payload?.exp) {
|
|
61
|
+
// JWT exp is in seconds, convert to milliseconds
|
|
62
|
+
return payload.exp * 1000;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Schedule the token expiring event
|
|
68
|
+
* Fires at (expiry - buffer) time
|
|
69
|
+
* @param token - The JWT token to schedule expiry for
|
|
70
|
+
*/
|
|
71
|
+
scheduleExpiryEvent(token) {
|
|
72
|
+
// Cancel any existing timer
|
|
73
|
+
this.cancelExpiryTimer();
|
|
74
|
+
const expiresAt = this.getTokenExpiry(token);
|
|
75
|
+
if (!expiresAt) {
|
|
76
|
+
// Token doesn't have expiry info, can't schedule
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const now = Date.now();
|
|
80
|
+
const timeUntilExpiry = expiresAt - now - this.expiryBufferMs;
|
|
81
|
+
if (timeUntilExpiry <= 0) {
|
|
82
|
+
// Token is already expired or within buffer, fire immediately
|
|
83
|
+
if (this.tokenExpiringCallback) {
|
|
84
|
+
this.tokenExpiringCallback(expiresAt);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Schedule the expiry event
|
|
89
|
+
this.expiryTimer = setTimeout(() => {
|
|
90
|
+
if (this.tokenExpiringCallback) {
|
|
91
|
+
this.tokenExpiringCallback(expiresAt);
|
|
92
|
+
}
|
|
93
|
+
}, timeUntilExpiry);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Cancel the expiry timer
|
|
97
|
+
*/
|
|
98
|
+
cancelExpiryTimer() {
|
|
99
|
+
if (this.expiryTimer) {
|
|
100
|
+
clearTimeout(this.expiryTimer);
|
|
101
|
+
this.expiryTimer = undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Set the callback to be called when token is about to expire
|
|
106
|
+
* @param callback - Function to call when token is expiring
|
|
107
|
+
*/
|
|
108
|
+
setTokenExpiringCallback(callback) {
|
|
109
|
+
this.tokenExpiringCallback = callback;
|
|
110
|
+
// If already authenticated, schedule the expiry event with current token
|
|
111
|
+
if (this.isAuthenticatedFlag && this.currentToken) {
|
|
112
|
+
this.scheduleExpiryEvent(this.currentToken);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Initialize the pre-auth authentication strategy
|
|
117
|
+
* Ensures the token is available and ready to use
|
|
118
|
+
*/
|
|
119
|
+
async initialize(options) {
|
|
120
|
+
console.debug('[PreAuthStrategy] initialize() called', {
|
|
121
|
+
hasPostAuthentication: !!options?.postAuthentication,
|
|
122
|
+
hasDeploymentInfo: !!options?.deploymentInfo
|
|
123
|
+
});
|
|
124
|
+
// Update postAuthentication callback even if already initialized
|
|
125
|
+
// This allows setting the callback after early initialization (e.g., for fetching agent details)
|
|
126
|
+
if (options?.postAuthentication) {
|
|
127
|
+
this.postAuthentication = options.postAuthentication;
|
|
128
|
+
console.debug('[PreAuthStrategy] postAuthentication callback SET');
|
|
129
|
+
}
|
|
130
|
+
if (options?.deploymentInfo) {
|
|
131
|
+
this.deploymentInfo = options.deploymentInfo;
|
|
132
|
+
}
|
|
133
|
+
// Ensure token is available and valid
|
|
134
|
+
// The token is set in constructor, but we verify it's still available here
|
|
135
|
+
if (!this.currentToken) {
|
|
136
|
+
throw new Error('PreAuthStrategy: Access token is required but not available');
|
|
137
|
+
}
|
|
138
|
+
// If we have a token and it's a JWT, we can validate its structure (but not signature)
|
|
139
|
+
// This ensures the token is properly formatted
|
|
140
|
+
const token = this.currentToken;
|
|
141
|
+
if (token.split('.').length === 3) {
|
|
142
|
+
// It's a JWT - validate basic structure
|
|
143
|
+
try {
|
|
144
|
+
this.decodeJwt(token);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
// Token structure is invalid, but we'll still allow it to proceed
|
|
148
|
+
// The actual validation happens when the token is used
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Authenticate using pre-auth token
|
|
154
|
+
*/
|
|
155
|
+
async authenticate() {
|
|
156
|
+
console.debug('[PreAuthStrategy] authenticate() called, postAuthentication callback:', this.postAuthentication ? 'SET' : 'NOT SET');
|
|
157
|
+
const token = await this.getToken();
|
|
158
|
+
this.isAuthenticatedFlag = true;
|
|
159
|
+
// Schedule expiry event for the current token
|
|
160
|
+
this.scheduleExpiryEvent(token);
|
|
161
|
+
// Call postAuthentication callback after authentication completes
|
|
162
|
+
if (this.postAuthentication) {
|
|
163
|
+
console.debug('[PreAuthStrategy] Calling postAuthentication callback');
|
|
164
|
+
await this.postAuthentication(token);
|
|
165
|
+
console.debug('[PreAuthStrategy] postAuthentication callback completed');
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.warn('[PreAuthStrategy] postAuthentication callback is not set - isInitialized may not be set to true');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if the user is currently authenticated
|
|
173
|
+
*/
|
|
174
|
+
isAuthenticated() {
|
|
175
|
+
return this.isAuthenticatedFlag;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get the access token
|
|
179
|
+
* If refresh function is provided and token is expired, attempts to refresh
|
|
180
|
+
*/
|
|
181
|
+
async getToken() {
|
|
182
|
+
return this.currentToken;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Update the access token
|
|
186
|
+
* Cancels existing expiry timer and schedules new one based on new token
|
|
187
|
+
* If authenticated, calls postAuthentication callback with the new token
|
|
188
|
+
* @param token - The new access token
|
|
189
|
+
*/
|
|
190
|
+
async updateToken(token) {
|
|
191
|
+
this.currentToken = token;
|
|
192
|
+
// Reschedule expiry event with new token
|
|
193
|
+
this.scheduleExpiryEvent(token);
|
|
194
|
+
// If authenticated, call postAuthentication callback with new token
|
|
195
|
+
if (this.isAuthenticatedFlag && this.postAuthentication) {
|
|
196
|
+
await this.postAuthentication(token);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Refresh the token using the provided refresh function
|
|
201
|
+
*/
|
|
202
|
+
async refreshToken() {
|
|
203
|
+
if (this.config.refreshTokenFn) {
|
|
204
|
+
const newToken = await this.config.refreshTokenFn();
|
|
205
|
+
await this.updateToken(newToken);
|
|
206
|
+
}
|
|
207
|
+
return this.currentToken;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Cleanup resources
|
|
211
|
+
*/
|
|
212
|
+
async cleanup() {
|
|
213
|
+
this.cancelExpiryTimer();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=PreAuthStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreAuthStrategy.js","sourceRoot":"","sources":["../../../src/core/auth/PreAuthStrategy.ts"],"names":[],"mappings":"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"}
|