obi-sdk 0.1.5 → 0.1.7
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/dist/{index-e52b38be.js → index-d9a81606.js} +792 -750
- package/dist/modular/index.js +109 -51
- package/dist/modular/index.js.map +1 -1
- package/dist/obi-sdk.es.js +1 -1
- package/dist/obi-sdk.standalone.iife.js +2 -2
- package/dist/obi-sdk.standalone.iife.js.map +1 -1
- package/dist/obi-sdk.umd.js +40 -40
- package/dist/{session-33b71dff.js → session-c2549ff3.js} +1 -1
- package/index.d.ts +61 -0
- package/package.json +4 -5
- package/obi-sdk.d.ts +0 -1
- package/src/index.d.ts +0 -38
package/dist/modular/index.js
CHANGED
|
@@ -3,7 +3,72 @@ import { a as a2, O } from "./chunks/assistant-5a47c1b4.js";
|
|
|
3
3
|
import "./chunks/mitt-3c1f932d.js";
|
|
4
4
|
const NPM_REGISTRY_URL = "https://registry.npmjs.org/obi-sdk/latest";
|
|
5
5
|
const UNPKG_BASE_URL = "https://unpkg.com/obi-sdk";
|
|
6
|
-
const
|
|
6
|
+
const w = window;
|
|
7
|
+
w.__obiSDKLoading = w.__obiSDKLoading || false;
|
|
8
|
+
const initObi = async (config) => {
|
|
9
|
+
w.obiWidgetConfig = config;
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
if (w.ObiAssistant) {
|
|
12
|
+
try {
|
|
13
|
+
const widget = createWidget(config);
|
|
14
|
+
resolve(widget);
|
|
15
|
+
return;
|
|
16
|
+
} catch (error) {
|
|
17
|
+
reject(new Error(`Error creating widget: ${error}`));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (w.__obiSDKLoading) {
|
|
22
|
+
checkSDKLoaded(() => {
|
|
23
|
+
try {
|
|
24
|
+
const widget = createWidget(config);
|
|
25
|
+
resolve(widget);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
reject(new Error(`Error creating widget after waiting: ${error}`));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
fetchManifestVersion().then((version) => {
|
|
33
|
+
loadSDKScript(
|
|
34
|
+
version,
|
|
35
|
+
() => {
|
|
36
|
+
w.__obiSDKLoading = false;
|
|
37
|
+
try {
|
|
38
|
+
const widget = createWidget(config);
|
|
39
|
+
resolve(widget);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
reject(new Error(`Error creating widget after loading SDK: ${error}`));
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
reject
|
|
45
|
+
);
|
|
46
|
+
}).catch(() => {
|
|
47
|
+
loadSDKScript(
|
|
48
|
+
null,
|
|
49
|
+
() => {
|
|
50
|
+
w.__obiSDKLoading = false;
|
|
51
|
+
try {
|
|
52
|
+
const widget = createWidget(config);
|
|
53
|
+
resolve(widget);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
reject(new Error(`Error creating widget with latest version: ${error}`));
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
reject
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
function checkSDKLoaded(callback) {
|
|
64
|
+
const checkInterval = setInterval(() => {
|
|
65
|
+
if (typeof w.ObiAssistant === "function" || typeof w.ObiAssistant === "object") {
|
|
66
|
+
clearInterval(checkInterval);
|
|
67
|
+
callback();
|
|
68
|
+
}
|
|
69
|
+
}, 100);
|
|
70
|
+
}
|
|
71
|
+
async function fetchManifestVersion() {
|
|
7
72
|
return new Promise((resolve) => {
|
|
8
73
|
try {
|
|
9
74
|
const xhr = new XMLHttpRequest();
|
|
@@ -26,58 +91,51 @@ const getLatestVersion = () => {
|
|
|
26
91
|
resolve(null);
|
|
27
92
|
}
|
|
28
93
|
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
94
|
+
}
|
|
95
|
+
function loadSDKScript(version, onSuccess, onError) {
|
|
96
|
+
w.__obiSDKLoading = true;
|
|
97
|
+
const script = document.createElement("script");
|
|
98
|
+
script.type = "text/javascript";
|
|
99
|
+
script.async = true;
|
|
100
|
+
const versionToUse = version || "latest";
|
|
101
|
+
script.src = `${UNPKG_BASE_URL}@${versionToUse}/dist/obi-sdk.standalone.iife.js`;
|
|
102
|
+
script.onload = onSuccess;
|
|
103
|
+
script.onerror = () => {
|
|
104
|
+
if (versionToUse !== "latest") {
|
|
105
|
+
console.warn("Failed to load specific version, falling back to latest");
|
|
106
|
+
script.src = `${UNPKG_BASE_URL}@latest/dist/obi-sdk.standalone.iife.js`;
|
|
107
|
+
script.onload = onSuccess;
|
|
108
|
+
} else {
|
|
109
|
+
w.__obiSDKLoading = false;
|
|
110
|
+
onError(new Error("Failed to load Obi SDK from CDN"));
|
|
39
111
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
createSession: window.ObiSDK?.createSession
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
script.onerror = () => {
|
|
53
|
-
if (sdkVersion !== "latest") {
|
|
54
|
-
console.warn("Failed to load specific version, falling back to latest");
|
|
55
|
-
script.src = `${UNPKG_BASE_URL}@latest/dist/obi-sdk.standalone.iife.js`;
|
|
56
|
-
script.onload = () => {
|
|
57
|
-
resolve({
|
|
58
|
-
ObiAssistant: window.ObiAssistant,
|
|
59
|
-
ObiSDK: window.ObiSDK,
|
|
60
|
-
createSession: window.ObiSDK?.createSession
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
} else {
|
|
64
|
-
reject(new Error("Failed to load Obi SDK from CDN"));
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
document.head.appendChild(script);
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
const loadLatestSDK = async () => {
|
|
71
|
-
const version = await getLatestVersion();
|
|
72
|
-
return loadSDKScript(version);
|
|
73
|
-
};
|
|
74
|
-
const initObi = async (config) => {
|
|
75
|
-
const { ObiAssistant } = await loadLatestSDK();
|
|
76
|
-
if (!ObiAssistant) {
|
|
77
|
-
throw new Error("Obi SDK loaded but ObiAssistant not found");
|
|
112
|
+
};
|
|
113
|
+
document.head.appendChild(script);
|
|
114
|
+
}
|
|
115
|
+
function createWidget(config) {
|
|
116
|
+
const d = document;
|
|
117
|
+
const existingWidget = d.querySelector("obi-widget");
|
|
118
|
+
if (existingWidget) {
|
|
119
|
+
console.log("Obi Widget already exists on the page");
|
|
120
|
+
return existingWidget;
|
|
78
121
|
}
|
|
79
|
-
|
|
80
|
-
|
|
122
|
+
if (!customElements.get("obi-widget")) {
|
|
123
|
+
throw new Error("Obi Widget component not registered - SDK may not have loaded properly");
|
|
124
|
+
}
|
|
125
|
+
const widget = d.createElement("obi-widget");
|
|
126
|
+
if (config.apiKey) {
|
|
127
|
+
widget.setAttribute("api-key", config.apiKey);
|
|
128
|
+
}
|
|
129
|
+
if (config.position) {
|
|
130
|
+
widget.setAttribute("position", config.position);
|
|
131
|
+
}
|
|
132
|
+
if (config.user) {
|
|
133
|
+
widget.setAttribute("user", JSON.stringify(config.user));
|
|
134
|
+
}
|
|
135
|
+
d.body.appendChild(widget);
|
|
136
|
+
console.log("Obi Widget added to page");
|
|
137
|
+
return widget;
|
|
138
|
+
}
|
|
81
139
|
export {
|
|
82
140
|
E as EventType,
|
|
83
141
|
a2 as ObiAssistant,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/loader/index.ts"],"sourcesContent":["import type { ObiAssistantConfig } from \"../core/assistant\"\n// Constants for SDK loading\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/obi-sdk/latest\"\nconst UNPKG_BASE_URL = \"https://unpkg.com/obi-sdk\"\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/loader/index.ts"],"sourcesContent":["import type { ObiAssistantConfig } from \"../core/assistant\"\n// Constants for SDK loading\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/obi-sdk/latest\"\nconst UNPKG_BASE_URL = \"https://unpkg.com/obi-sdk\"\n\n// Global flag for SDK loading to prevent multiple simultaneous loads\nconst w = window as any\nw.__obiSDKLoading = w.__obiSDKLoading || false\n\n/**\n * Initialize the Obi Assistant widget by loading the latest version from CDN\n * This ensures users always get the latest features and bug fixes\n */\nexport const initObi = async (config: ObiAssistantConfig): Promise<HTMLElement> => {\n // Store the config in window for use by the CDN script\n w.obiWidgetConfig = config\n\n return new Promise((resolve, reject) => {\n // If Obi is already in the window, use it directly\n if (w.ObiAssistant) {\n try {\n const widget = createWidget(config)\n resolve(widget)\n return\n } catch (error) {\n reject(new Error(`Error creating widget: ${error}`))\n return\n }\n }\n\n // Check if another instance is already loading the SDK\n if (w.__obiSDKLoading) {\n // Wait for SDK to load then create widget\n checkSDKLoaded(() => {\n try {\n const widget = createWidget(config)\n resolve(widget)\n } catch (error) {\n reject(new Error(`Error creating widget after waiting: ${error}`))\n }\n })\n return\n }\n\n // First check for manifest with latest version info\n fetchManifestVersion()\n .then((version) => {\n // Load the SDK with the specific version\n loadSDKScript(\n version,\n () => {\n w.__obiSDKLoading = false\n try {\n const widget = createWidget(config)\n resolve(widget)\n } catch (error) {\n reject(new Error(`Error creating widget after loading SDK: ${error}`))\n }\n },\n reject\n )\n })\n .catch(() => {\n // If version fetch fails, try loading latest\n loadSDKScript(\n null,\n () => {\n w.__obiSDKLoading = false\n try {\n const widget = createWidget(config)\n resolve(widget)\n } catch (error) {\n reject(new Error(`Error creating widget with latest version: ${error}`))\n }\n },\n reject\n )\n })\n })\n}\n\n/**\n * Poll for SDK loading completion\n */\nfunction checkSDKLoaded(callback: () => void): void {\n const checkInterval = setInterval(() => {\n if (typeof w.ObiAssistant === \"function\" || typeof w.ObiAssistant === \"object\") {\n clearInterval(checkInterval)\n callback()\n }\n }, 100)\n}\n\n/**\n * Fetch the latest version from NPM registry\n */\nasync function fetchManifestVersion(): Promise<string | null> {\n return new Promise((resolve) => {\n try {\n const xhr = new XMLHttpRequest()\n xhr.open(\"GET\", NPM_REGISTRY_URL)\n xhr.onload = () => {\n if (xhr.status === 200) {\n try {\n const response = JSON.parse(xhr.responseText)\n resolve(response.version)\n } catch (e) {\n resolve(null)\n }\n } else {\n resolve(null)\n }\n }\n xhr.onerror = () => resolve(null)\n xhr.send()\n } catch (e) {\n resolve(null)\n }\n })\n}\n\n/**\n * Load the SDK script from CDN\n */\nfunction loadSDKScript(\n version: string | null,\n onSuccess: () => void,\n onError: (error: Error) => void\n): void {\n // Set loading flag\n w.__obiSDKLoading = true\n\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.async = true\n\n // Use the specific version for better caching, or fall back to latest\n const versionToUse = version || \"latest\"\n script.src = `${UNPKG_BASE_URL}@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n // Set up onload handler\n script.onload = onSuccess\n\n // Handle errors\n script.onerror = () => {\n // If specific version fails, try falling back to latest\n if (versionToUse !== \"latest\") {\n console.warn(\"Failed to load specific version, falling back to latest\")\n script.src = `${UNPKG_BASE_URL}@latest/dist/obi-sdk.standalone.iife.js`\n script.onload = onSuccess\n } else {\n w.__obiSDKLoading = false\n onError(new Error(\"Failed to load Obi SDK from CDN\"))\n }\n }\n\n // Add the script to the document\n document.head.appendChild(script)\n}\n\n/**\n * Create the widget element\n */\nfunction createWidget(config: ObiAssistantConfig): HTMLElement {\n const d = document\n\n // Don't create multiple widgets\n const existingWidget = d.querySelector(\"obi-widget\")\n if (existingWidget) {\n console.log(\"Obi Widget already exists on the page\")\n return existingWidget as HTMLElement\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n throw new Error(\"Obi Widget component not registered - SDK may not have loaded properly\")\n }\n\n // Create the widget element\n const widget = d.createElement(\"obi-widget\") as HTMLElement\n\n // Pass API key if provided\n if (config.apiKey) {\n widget.setAttribute(\"api-key\", config.apiKey)\n }\n\n // Set position attribute if provided\n if (config.position) {\n widget.setAttribute(\"position\", config.position)\n }\n\n // Set user information if provided\n if (config.user) {\n widget.setAttribute(\"user\", JSON.stringify(config.user))\n }\n\n // Add to page\n d.body.appendChild(widget)\n console.log(\"Obi Widget added to page\")\n\n return widget\n}\n\n/**\n * Get the latest SDK instance for advanced usage\n */\nexport const getLatestSDK = async () => {\n throw new Error(\"getLatestSDK() is not implemented in this version\")\n}\n\n/**\n * Create a session using the latest SDK\n */\nexport const createLatestSession = async () => {\n throw new Error(\"createLatestSession() is not implemented in this version\")\n}\n"],"names":[],"mappings":"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"}
|
package/dist/obi-sdk.es.js
CHANGED