@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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic loader for platform connector scripts.
|
|
3
|
+
*
|
|
4
|
+
* In browser environments, injects a `<script>` tag. In non-browser
|
|
5
|
+
* environments (Node.js, SSR), falls back to dynamic `import()` using
|
|
6
|
+
* the same constructed URL.
|
|
7
|
+
*
|
|
8
|
+
* @module PlatformScriptLoader
|
|
9
|
+
*/
|
|
10
|
+
const ENV_BASE_URLS = {
|
|
11
|
+
dev: 'https://dev-apps.egeng.info/',
|
|
12
|
+
qa: 'https://qa-apps.egeng.info/',
|
|
13
|
+
prod: 'https://apps.egain.services/',
|
|
14
|
+
stage: 'https://non-prod-apps.egain.services/',
|
|
15
|
+
euprod: 'https://apps.egain.cloud/',
|
|
16
|
+
eustage: 'https://non-prod-apps.egain.cloud/',
|
|
17
|
+
devrf: 'https://dev-apps.ezdev.net/',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Derive the deployment environment from available state.
|
|
21
|
+
*
|
|
22
|
+
* Priority: explicit env string > parsed from domain (dev-/qa- prefix) > "prod".
|
|
23
|
+
*/
|
|
24
|
+
export function deriveEnvironment(domain, explicitEnv) {
|
|
25
|
+
if (explicitEnv) {
|
|
26
|
+
const env = explicitEnv.toLowerCase();
|
|
27
|
+
if (env === 'dev' || env === 'qa' || env === 'prod')
|
|
28
|
+
return env;
|
|
29
|
+
}
|
|
30
|
+
if (domain) {
|
|
31
|
+
const d = domain.toLowerCase();
|
|
32
|
+
if (d.startsWith('dev-') || d.includes('dev-'))
|
|
33
|
+
return 'dev';
|
|
34
|
+
if (d.startsWith('qa-') || d.includes('qa-'))
|
|
35
|
+
return 'qa';
|
|
36
|
+
}
|
|
37
|
+
return 'prod';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Construct the connector script URL for a given platform and environment.
|
|
41
|
+
*/
|
|
42
|
+
export function buildPlatformScriptUrl(platform, environment) {
|
|
43
|
+
const baseUrl = ENV_BASE_URLS[environment] ?? ENV_BASE_URLS.prod;
|
|
44
|
+
return `${baseUrl}ai-agent-connector-${platform}/web/static/connector-ai-agent.js`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load a platform connector script.
|
|
48
|
+
*
|
|
49
|
+
* - **Browser:** Injects a `<script>` tag into `document.head`, waits for
|
|
50
|
+
* `onload` + 100ms buffer, then verifies `window.PlatformComponentService`.
|
|
51
|
+
* - **Non-browser:** Uses dynamic `import()` with the same constructed URL.
|
|
52
|
+
* The imported module must export `PlatformComponentService` as a default
|
|
53
|
+
* or named export.
|
|
54
|
+
*/
|
|
55
|
+
export async function loadPlatformScript(options) {
|
|
56
|
+
const { platform, baseUrl, overrideUrl, logger } = options;
|
|
57
|
+
const scriptUrl = overrideUrl ?? buildPlatformScriptUrl(platform, baseUrl);
|
|
58
|
+
const isBrowser = typeof document !== 'undefined';
|
|
59
|
+
if (isBrowser) {
|
|
60
|
+
await loadViaBrowserScript(scriptUrl, logger);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
await loadViaDynamicImport(scriptUrl, logger);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function loadViaBrowserScript(url, logger) {
|
|
67
|
+
logger.info('Loading platform connector script via <script> tag', { url });
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
const script = document.createElement('script');
|
|
70
|
+
script.src = url;
|
|
71
|
+
script.async = true;
|
|
72
|
+
script.crossOrigin = 'anonymous';
|
|
73
|
+
script.onload = () => {
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
if (window.PlatformComponentService) {
|
|
76
|
+
logger.info('PlatformComponentService registered successfully');
|
|
77
|
+
resolve();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
reject(new Error(`Platform connector script loaded from "${url}" but window.PlatformComponentService was not registered`));
|
|
81
|
+
}
|
|
82
|
+
}, 100);
|
|
83
|
+
};
|
|
84
|
+
script.onerror = () => {
|
|
85
|
+
reject(new Error(`Failed to load platform connector script from "${url}"`));
|
|
86
|
+
};
|
|
87
|
+
document.head.appendChild(script);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async function loadViaDynamicImport(url, logger) {
|
|
91
|
+
logger.info('Loading platform connector module via dynamic import()', { url });
|
|
92
|
+
try {
|
|
93
|
+
const mod = await import(/* webpackIgnore: true */ url);
|
|
94
|
+
const service = mod.default ?? mod.PlatformComponentService;
|
|
95
|
+
if (service) {
|
|
96
|
+
globalThis.PlatformComponentService = service;
|
|
97
|
+
logger.info('PlatformComponentService resolved from dynamic import');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw new Error('Imported module does not export PlatformComponentService');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (err instanceof Error && err.message === 'Imported module does not export PlatformComponentService') {
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Failed to dynamically import platform connector from "${url}": ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=PlatformScriptLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlatformScriptLoader.js","sourceRoot":"","sources":["../../../src/core/platform/PlatformScriptLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic polyfill detection and setup for Node.js environments
|
|
3
|
+
*
|
|
4
|
+
* This module automatically detects the runtime environment and sets up
|
|
5
|
+
* necessary polyfills for WebSocket and fetch when running in Node.js.
|
|
6
|
+
*
|
|
7
|
+
* In browser environments, native WebSocket and fetch are used.
|
|
8
|
+
* In Node.js environments, it attempts to load 'ws' for WebSocket and
|
|
9
|
+
* 'node-fetch' for fetch (if Node version < 18).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Initialize polyfills automatically
|
|
13
|
+
* This function is called when the SDK is imported
|
|
14
|
+
*/
|
|
15
|
+
export declare function initializePolyfills(): void;
|
|
16
|
+
//# sourceMappingURL=polyfills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.d.ts","sourceRoot":"","sources":["../../src/core/polyfills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+JH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic polyfill detection and setup for Node.js environments
|
|
3
|
+
*
|
|
4
|
+
* This module automatically detects the runtime environment and sets up
|
|
5
|
+
* necessary polyfills for WebSocket and fetch when running in Node.js.
|
|
6
|
+
*
|
|
7
|
+
* In browser environments, native WebSocket and fetch are used.
|
|
8
|
+
* In Node.js environments, it attempts to load 'ws' for WebSocket and
|
|
9
|
+
* 'node-fetch' for fetch (if Node version < 18).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Check if we're running in a Node.js environment
|
|
13
|
+
*/
|
|
14
|
+
function isNodeEnvironment() {
|
|
15
|
+
return (typeof process !== 'undefined' &&
|
|
16
|
+
process.versions != null &&
|
|
17
|
+
process.versions.node != null &&
|
|
18
|
+
typeof window === 'undefined');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get a require function for loading CommonJS modules in ES module context
|
|
22
|
+
* Works in both CommonJS and ES module environments
|
|
23
|
+
*/
|
|
24
|
+
function getRequire() {
|
|
25
|
+
if (!isNodeEnvironment()) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
// In ES modules, we need to use createRequire from 'module'
|
|
30
|
+
// However, we can't synchronously import in ES modules
|
|
31
|
+
// So we use a workaround: try to access require via different methods
|
|
32
|
+
// Method 1: Try CommonJS require (if we're in a CommonJS context)
|
|
33
|
+
if (typeof require !== 'undefined' && typeof require === 'function') {
|
|
34
|
+
try {
|
|
35
|
+
const Module = require('module');
|
|
36
|
+
if (Module && Module.createRequire) {
|
|
37
|
+
return Module.createRequire(import.meta.url);
|
|
38
|
+
}
|
|
39
|
+
// If createRequire not available, use require directly (CommonJS)
|
|
40
|
+
return require;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// module not available, but require might still work
|
|
44
|
+
return require;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Method 2: Try global require (some environments expose this)
|
|
48
|
+
if (typeof globalThis.require === 'function') {
|
|
49
|
+
try {
|
|
50
|
+
const Module = globalThis.require('module');
|
|
51
|
+
if (Module && Module.createRequire) {
|
|
52
|
+
return Module.createRequire(import.meta.url);
|
|
53
|
+
}
|
|
54
|
+
return globalThis.require;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return globalThis.require;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Method 3: Try to use createRequire via Function constructor (works in Node.js)
|
|
61
|
+
// This is a workaround for ES modules where require is not directly available
|
|
62
|
+
try {
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
64
|
+
const requireFn = new Function('return require')();
|
|
65
|
+
if (typeof requireFn === 'function') {
|
|
66
|
+
const Module = requireFn('module');
|
|
67
|
+
if (Module && Module.createRequire) {
|
|
68
|
+
return Module.createRequire(import.meta.url);
|
|
69
|
+
}
|
|
70
|
+
return requireFn;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Function constructor approach failed
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Setup WebSocket polyfill for Node.js
|
|
84
|
+
* Attempts to load 'ws' package and assign it to global.WebSocket
|
|
85
|
+
*/
|
|
86
|
+
function setupWebSocketPolyfill() {
|
|
87
|
+
// Only setup in Node.js environment
|
|
88
|
+
if (!isNodeEnvironment()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Check if WebSocket is already available globally
|
|
92
|
+
if (typeof globalThis.WebSocket !== 'undefined') {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const requireFn = getRequire();
|
|
96
|
+
if (!requireFn) {
|
|
97
|
+
// Can't load polyfill automatically - this is OK, user can set it up manually
|
|
98
|
+
// We don't warn here because the SDK might be bundled and this is expected
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const ws = requireFn('ws');
|
|
103
|
+
if (ws && ws.default) {
|
|
104
|
+
// Handle ES module default export
|
|
105
|
+
globalThis.WebSocket = ws.default;
|
|
106
|
+
}
|
|
107
|
+
else if (ws) {
|
|
108
|
+
// Handle CommonJS export
|
|
109
|
+
globalThis.WebSocket = ws;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
// 'ws' package not available - this is expected in browser builds
|
|
114
|
+
// In Node.js, users should install 'ws' as a peer dependency
|
|
115
|
+
// We don't warn here to avoid noise - the error will be clear when WebSocket is used
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Setup fetch polyfill for Node.js (only needed for Node < 18)
|
|
120
|
+
* Attempts to load 'node-fetch' package and assign it to global.fetch
|
|
121
|
+
*/
|
|
122
|
+
function setupFetchPolyfill() {
|
|
123
|
+
// Only setup in Node.js environment
|
|
124
|
+
if (!isNodeEnvironment()) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Check if fetch is already available globally
|
|
128
|
+
if (typeof globalThis.fetch !== 'undefined') {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Node.js 18+ has native fetch, so we only need polyfill for older versions
|
|
132
|
+
const nodeVersion = process.versions.node;
|
|
133
|
+
const majorVersion = parseInt(nodeVersion.split('.')[0], 10);
|
|
134
|
+
// For Node 18+, native fetch should be available
|
|
135
|
+
if (majorVersion >= 18) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const requireFn = getRequire();
|
|
139
|
+
if (!requireFn) {
|
|
140
|
+
// Can't load polyfill automatically
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const nodeFetch = requireFn('node-fetch');
|
|
145
|
+
if (nodeFetch && nodeFetch.default) {
|
|
146
|
+
globalThis.fetch = nodeFetch.default;
|
|
147
|
+
}
|
|
148
|
+
else if (nodeFetch) {
|
|
149
|
+
globalThis.fetch = nodeFetch;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
// node-fetch not available - this is OK for Node 18+, but needed for < 18
|
|
154
|
+
// Error will be clear when fetch is used
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Initialize polyfills automatically
|
|
159
|
+
* This function is called when the SDK is imported
|
|
160
|
+
*/
|
|
161
|
+
export function initializePolyfills() {
|
|
162
|
+
setupWebSocketPolyfill();
|
|
163
|
+
setupFetchPolyfill();
|
|
164
|
+
}
|
|
165
|
+
// Auto-initialize polyfills when this module is imported
|
|
166
|
+
// This ensures polyfills are set up before any SDK code runs
|
|
167
|
+
initializePolyfills();
|
|
168
|
+
//# sourceMappingURL=polyfills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.js","sourceRoot":"","sources":["../../src/core/polyfills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PortalInitializer — Event-driven chained pipeline for portal-based agent initialization
|
|
3
|
+
*
|
|
4
|
+
* Uses a chained architecture where each step either auto-selects and calls
|
|
5
|
+
* the next method directly, or emits an event and returns. The pipeline
|
|
6
|
+
* progresses via direct method calls triggered by the consumer's selection
|
|
7
|
+
* methods on AiAgent (selectPortal, selectAgent, selectUserProfile).
|
|
8
|
+
*
|
|
9
|
+
* Chain: start() → fetchPortals() → handleSelectedPortal() → handleSelectedAgent() → completeInitialization()
|
|
10
|
+
*
|
|
11
|
+
* Public handler methods: onPortalSelected(), onAgentSelected(), onProfileSelected()
|
|
12
|
+
*
|
|
13
|
+
* The pipeline has zero WebSocket knowledge — it is pure REST. The consumer
|
|
14
|
+
* calls connect() after receiving the initialized event.
|
|
15
|
+
*
|
|
16
|
+
* **cc-widget customer parity** (`agentDetails.userType === 'customer'` with non-empty `agentDetails.portals`):
|
|
17
|
+
* portal list is built only from those IDs (no myportals / portalIds / intersection / PCS / Flow B list filter).
|
|
18
|
+
* When `userType === 'customer'` or `initParams.authType === 'customer'`, skips GET userprofiles and may set
|
|
19
|
+
* profiles from `portalDetails.portal[0].portalSettings.defaultUserProfile` only. PUT `.../userprofiles/.../select`
|
|
20
|
+
* runs only for `userType === 'agent'`, `authType === 'user'`, or legacy unset typing (defaults to persist).
|
|
21
|
+
*
|
|
22
|
+
* @module PortalInitializer
|
|
23
|
+
*/
|
|
24
|
+
import type { CacheAdapter } from "../api/CacheAdapter.js";
|
|
25
|
+
import type { Portal, UserProfile, AgentListItem } from "../types/PortalTypes.js";
|
|
26
|
+
import type { PlatformComponentService } from "../platform/PlatformComponentService.js";
|
|
27
|
+
import type { HookContract } from "../platform/HookContract.js";
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for PortalInitializer (injected dependencies).
|
|
30
|
+
* Pipeline has zero WebSocket knowledge; portal details and agents are always re-fetched via API (not cached).
|
|
31
|
+
*/
|
|
32
|
+
export interface PortalInitializerConfig {
|
|
33
|
+
agentId: string;
|
|
34
|
+
apiHelper: {
|
|
35
|
+
getMyPortals: (options: any) => Promise<Portal[]>;
|
|
36
|
+
getPortalDetails?: (options: any) => Promise<any>;
|
|
37
|
+
getAgentsByPortal: (options: any) => Promise<AgentListItem[]>;
|
|
38
|
+
getUserProfiles: (options: any) => Promise<UserProfile[]>;
|
|
39
|
+
selectUserProfile: (options: any) => Promise<void>;
|
|
40
|
+
};
|
|
41
|
+
logger: {
|
|
42
|
+
debug: (msg: string, ctx?: object) => void;
|
|
43
|
+
info: (msg: string, ctx?: object) => void;
|
|
44
|
+
warn: (msg: string, ctx?: object) => void;
|
|
45
|
+
error: (msg: string, err?: Error, ctx?: object) => void;
|
|
46
|
+
createChild: (name: string) => any;
|
|
47
|
+
};
|
|
48
|
+
authService: {
|
|
49
|
+
getToken: () => Promise<string | null>;
|
|
50
|
+
};
|
|
51
|
+
initParams: Record<string, string>;
|
|
52
|
+
/**
|
|
53
|
+
* Event emission function. AiAgent injects its own emit here and performs
|
|
54
|
+
* bookkeeping (setting resolvedAgentId, caching, isInitialized) when
|
|
55
|
+
* type === 'initialized'.
|
|
56
|
+
*/
|
|
57
|
+
emit: (eventType: string, event: any) => void;
|
|
58
|
+
createAgentEventResponse: (type: string, payload: any) => any;
|
|
59
|
+
/**
|
|
60
|
+
* Optional cache adapter for profiles list reused on restart (portal-scoped).
|
|
61
|
+
* Portals are always fetched fresh from the API. Portal details and agents are also never cached.
|
|
62
|
+
*/
|
|
63
|
+
pipelineCache?: {
|
|
64
|
+
adapter: CacheAdapter;
|
|
65
|
+
/** Returns the profiles cache key scoped to the given portalId. */
|
|
66
|
+
profilesKey: (portalId: string | number) => string;
|
|
67
|
+
/** Time-to-live in ms. Cached entries older than this are discarded on read. */
|
|
68
|
+
ttl?: number;
|
|
69
|
+
};
|
|
70
|
+
isAgentSelectionMode: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Agent details stored on the agent (e.g. AiAgent's agentDetails).
|
|
73
|
+
* - `languageCode` — forwarded to portalmgr portal list API (`getMyPortals`) as `$lang`.
|
|
74
|
+
* - `departmentId` — Flow B: filters portals by `portal.department.id` (cc-widget: from default agent API details). `initParams.departmentId` is fallback only.
|
|
75
|
+
* - `portals` — used for user/agent portal intersection when `initParams.agentid` is set and not in Flow B; for `userType === 'customer'` with a non-empty list, used as the sole portal list (cc-widget parity).
|
|
76
|
+
* - `userType` — `'customer'` enables cc-widget customer portal list, profile, and select-API behavior.
|
|
77
|
+
*/
|
|
78
|
+
agentDetails?: {
|
|
79
|
+
languageCode?: string;
|
|
80
|
+
departmentId?: string | number;
|
|
81
|
+
portals?: Array<string | number | {
|
|
82
|
+
id?: string | number;
|
|
83
|
+
}>;
|
|
84
|
+
userType?: "agent" | "customer";
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Platform component service (from loaded connector script).
|
|
88
|
+
* When present, the pipeline calls portal-related hooks during execution.
|
|
89
|
+
*/
|
|
90
|
+
platformComponentService?: PlatformComponentService;
|
|
91
|
+
/**
|
|
92
|
+
* HookContract instance (built by AiAgent). Needed so that onPortalSelected
|
|
93
|
+
* can store filter tags via setUserFilterTags.
|
|
94
|
+
*/
|
|
95
|
+
hookContract?: HookContract;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Event-driven chained pipeline for the CC widget initialization flow.
|
|
99
|
+
*
|
|
100
|
+
* Each step auto-selects (count == 1) and calls the next method directly,
|
|
101
|
+
* or emits an event and returns. The consumer's selection call triggers the
|
|
102
|
+
* next step — no await gates.
|
|
103
|
+
*
|
|
104
|
+
* Supports Flow A (specific agent: portal → profile) and Flow B (default agent: portal → agent → profile).
|
|
105
|
+
*/
|
|
106
|
+
export declare class PortalInitializer {
|
|
107
|
+
private deps;
|
|
108
|
+
private portals;
|
|
109
|
+
private selectedPortal?;
|
|
110
|
+
private portalDetails?;
|
|
111
|
+
private profiles;
|
|
112
|
+
private agents;
|
|
113
|
+
private selectedAgent?;
|
|
114
|
+
private selectedProfile?;
|
|
115
|
+
private destroyed;
|
|
116
|
+
constructor(deps: PortalInitializerConfig);
|
|
117
|
+
private readCachedFromAdapter;
|
|
118
|
+
/**
|
|
119
|
+
* Start the pipeline. Performs pre-flight (token acquisition, portal-selection
|
|
120
|
+
* requirement check) and kicks off fetchPortals() when needed.
|
|
121
|
+
*
|
|
122
|
+
* Per the architecture diagram, start() checks queryParam.isDefaultAgent:
|
|
123
|
+
* - True → fetchPortals() (Flow B)
|
|
124
|
+
* - False → fetchPortals() (Flow A); portal list may be narrowed via `agentid` + `agentDetails.portals` like cc-widget
|
|
125
|
+
*/
|
|
126
|
+
start(): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Fetch portals (once), apply mode-specific filtering, then auto-select or emit.
|
|
129
|
+
*
|
|
130
|
+
* Mirrors cc-widget's `getFilteredPortals`: resolve the portal list first
|
|
131
|
+
* (customer synthetic / portalIds / API), then branch on mode for filtering.
|
|
132
|
+
* Customer synthetic path skips filtering entirely.
|
|
133
|
+
*/
|
|
134
|
+
private fetchPortals;
|
|
135
|
+
/**
|
|
136
|
+
* Flow A filter: intersect user portals with the specific agent's portal list
|
|
137
|
+
* (when `initParams.agentid` is set), then run PCS hooks.
|
|
138
|
+
*/
|
|
139
|
+
private filterAgentSpecificPortals;
|
|
140
|
+
/**
|
|
141
|
+
* Flow B filter: run PCS hooks, then narrow portals to those whose department
|
|
142
|
+
* matches the resolved `departmentId` (from agentDetails or initParams).
|
|
143
|
+
*/
|
|
144
|
+
private filterDepartmentSpecificPortals;
|
|
145
|
+
/**
|
|
146
|
+
* Run PCS getPortalList and getDefaultPortal hooks on the portal list.
|
|
147
|
+
* Errors cause the portal list to be cleared (cc-widget callPortalWebhook parity).
|
|
148
|
+
*/
|
|
149
|
+
private applyPcsHooks;
|
|
150
|
+
/**
|
|
151
|
+
* Validate that the portal list is non-empty, store it, then either
|
|
152
|
+
* auto-select (single portal) or emit portalsAvailable for the consumer.
|
|
153
|
+
*/
|
|
154
|
+
private emitPortalsAvailable;
|
|
155
|
+
/**
|
|
156
|
+
* Process the selected portal: resolve portal details + profiles, enrich
|
|
157
|
+
* the portal name, then branch to agent selection (Flow B) or profile
|
|
158
|
+
* resolution (Flow A).
|
|
159
|
+
*/
|
|
160
|
+
private handleSelectedPortal;
|
|
161
|
+
/** Fetch portal details from API. Swallows errors and returns undefined on failure. */
|
|
162
|
+
private fetchPortalDetails;
|
|
163
|
+
/** Cache-hit strategy: return cached profiles with fresh portal details, or null if cache miss. */
|
|
164
|
+
private resolveProfilesFromCache;
|
|
165
|
+
/**
|
|
166
|
+
* Customer strategy: fetch portal details only (skip getUserProfiles),
|
|
167
|
+
* extract defaultUserProfile from portal settings if present.
|
|
168
|
+
*/
|
|
169
|
+
private resolveProfilesForCustomer;
|
|
170
|
+
/** Normal strategy: fetch portal details and user profiles in parallel. */
|
|
171
|
+
private resolveProfilesFromApi;
|
|
172
|
+
/**
|
|
173
|
+
* Extract the default user profile from portal details for customer mode.
|
|
174
|
+
* Returns a single-element array if a valid default exists, otherwise empty.
|
|
175
|
+
*/
|
|
176
|
+
private extractCustomerProfileFromDetails;
|
|
177
|
+
/**
|
|
178
|
+
* Enrich `selectedPortal.name` and the matching `portals[]` entry from
|
|
179
|
+
* the portal details API response (cc-widget portalService.handlePortalSelection parity).
|
|
180
|
+
*/
|
|
181
|
+
private addPortalName;
|
|
182
|
+
/**
|
|
183
|
+
* Flow B: validate departmentId, fetch agents for the selected portal,
|
|
184
|
+
* then auto-select (single agent) or emit agentsAvailable.
|
|
185
|
+
*/
|
|
186
|
+
private fetchAndEmitAgents;
|
|
187
|
+
/**
|
|
188
|
+
* Process the selected agent (or no agent in Flow A): resolve profile selection
|
|
189
|
+
* using priority logic, then chain to completeInitialization or emit profilesAvailable.
|
|
190
|
+
*/
|
|
191
|
+
private handleSelectedAgent;
|
|
192
|
+
/**
|
|
193
|
+
* Priority cascade for auto-selecting a profile.
|
|
194
|
+
* Returns `{ profile }` when one can be auto-selected (including `undefined`
|
|
195
|
+
* for the zero-profiles case), or `null` when the consumer must choose.
|
|
196
|
+
*
|
|
197
|
+
* Priority: no profiles → single → lastUsed → portalDefault → null (emit)
|
|
198
|
+
*/
|
|
199
|
+
private resolveAutoProfile;
|
|
200
|
+
/** Extract the default profile ID from the two possible portal details shapes. */
|
|
201
|
+
private getDefaultProfileFromPortal;
|
|
202
|
+
/**
|
|
203
|
+
* Final pipeline step: persist profile selection and emit the initialized event
|
|
204
|
+
* with the full payload built from instance fields.
|
|
205
|
+
*/
|
|
206
|
+
private completeInitialization;
|
|
207
|
+
/**
|
|
208
|
+
* Call PCS.onPortalSelected() and store filter tags if returned.
|
|
209
|
+
* Best-effort: errors are logged as warnings and filter tags default to {}.
|
|
210
|
+
*/
|
|
211
|
+
private callOnPortalSelected;
|
|
212
|
+
/**
|
|
213
|
+
* Called by AiAgent.selectPortal(). Stores the selected portal and triggers
|
|
214
|
+
* the next pipeline step (handleSelectedPortal).
|
|
215
|
+
*/
|
|
216
|
+
onPortalSelected(portal: Portal): void;
|
|
217
|
+
/**
|
|
218
|
+
* Called by AiAgent.selectAgent(). Stores the selected agent and triggers
|
|
219
|
+
* the next pipeline step (handleSelectedAgent). Flow B only.
|
|
220
|
+
*/
|
|
221
|
+
onAgentSelected(agent: AgentListItem): void;
|
|
222
|
+
/**
|
|
223
|
+
* Called by AiAgent.selectUserProfile(). Stores the selected profile and triggers
|
|
224
|
+
* the final pipeline step (completeInitialization).
|
|
225
|
+
*/
|
|
226
|
+
onProfileSelected(profile: UserProfile): void;
|
|
227
|
+
/**
|
|
228
|
+
* Destroy the pipeline. Sets a destroyed flag so that any in-progress or
|
|
229
|
+
* future chained method calls are no-ops. After calling destroy(), the
|
|
230
|
+
* pipeline instance must not be reused.
|
|
231
|
+
*/
|
|
232
|
+
destroy(): void;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=PortalInitializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalInitializer.d.ts","sourceRoot":"","sources":["../../../src/core/portal-initializer/PortalInitializer.ts"],"names":[],"mappings":"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"}
|