obi-sdk 0.1.8 → 0.1.9

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.
@@ -1,4 +1,4 @@
1
- import { S as re, m as oa, z as yn } from "./index-d9a81606.js";
1
+ import { S as re, m as oa, z as yn } from "./index-719ec57d.js";
2
2
  import "lit";
3
3
  function ca(n, e) {
4
4
  return e.forEach(function(t) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obi-sdk",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "JavaScript SDK for Obi",
5
5
  "type": "module",
6
6
  "main": "dist/obi-sdk.umd.js",
@@ -65,4 +65,4 @@
65
65
  "typescript": "^5.0.2",
66
66
  "vite": "^4.5.0"
67
67
  }
68
- }
68
+ }
@@ -1,234 +0,0 @@
1
- import { m as mitt } from "./mitt-3c1f932d.js";
2
- import { S as SDKState, O as ObiSDKConfigSchema, E as EventType, a as ObiWidget } from "./obi-widget-0d63936f.js";
3
- class ObiSDK {
4
- constructor(config = {}) {
5
- this.state = SDKState.READY;
6
- this.emitter = mitt();
7
- this.voiceEnabled = false;
8
- this.screenCaptureEnabled = false;
9
- this.config = ObiSDKConfigSchema.parse(config);
10
- if (this.config.debug) {
11
- console.log("ObiSDK initialized with config:", this.config);
12
- }
13
- }
14
- async init() {
15
- try {
16
- if (this.config.enableVoice) {
17
- await this.initVoice();
18
- }
19
- if (this.config.enableScreenCapture) {
20
- await this.initScreenCapture();
21
- }
22
- this.setState(SDKState.READY);
23
- this.emitter.emit(EventType.READY);
24
- if (this.config.debug) {
25
- console.log("ObiSDK ready");
26
- }
27
- } catch (error) {
28
- const sdkError = {
29
- code: "init_failed",
30
- message: "Failed to initialize SDK",
31
- details: error
32
- };
33
- this.handleError(sdkError);
34
- }
35
- }
36
- async initVoice() {
37
- if (!window.navigator.mediaDevices || !window.navigator.mediaDevices.getUserMedia) {
38
- throw new Error("Voice recording not supported in this browser");
39
- }
40
- try {
41
- await window.navigator.mediaDevices.getUserMedia({ audio: true });
42
- this.voiceEnabled = true;
43
- if (this.config.debug) {
44
- console.log("Voice capabilities initialized");
45
- }
46
- } catch (error) {
47
- throw new Error(`Microphone access denied: ${error}`);
48
- }
49
- }
50
- async initScreenCapture() {
51
- if (!window.navigator.mediaDevices || !window.navigator.mediaDevices.getDisplayMedia) {
52
- throw new Error("Screen capture not supported in this browser");
53
- }
54
- this.screenCaptureEnabled = true;
55
- if (this.config.debug) {
56
- console.log("Screen capture capabilities initialized");
57
- }
58
- }
59
- /**
60
- * Set the SDK state and emit state change event
61
- */
62
- setState(newState) {
63
- this.state = newState;
64
- this.emitter.emit(EventType.STATE_CHANGE, newState);
65
- }
66
- /**
67
- * Handle SDK errors
68
- */
69
- handleError(error) {
70
- this.setState(SDKState.ERROR);
71
- this.emitter.emit(EventType.ERROR, error);
72
- if (this.config.debug) {
73
- console.error("ObiSDK error:", error);
74
- }
75
- }
76
- /**
77
- * Start voice recording
78
- */
79
- async startVoiceRecording() {
80
- if (!this.voiceEnabled) {
81
- this.handleError({
82
- code: "voice_disabled",
83
- message: "Voice recording is not enabled or available"
84
- });
85
- return;
86
- }
87
- try {
88
- this.setState(SDKState.AGENT_SPEAKING);
89
- this.emitter.emit(EventType.VOICE_START);
90
- if (this.config.debug) {
91
- console.log("Voice recording started");
92
- }
93
- } catch (error) {
94
- this.handleError({
95
- code: "voice_start_failed",
96
- message: "Failed to start voice recording",
97
- details: error
98
- });
99
- }
100
- }
101
- /**
102
- * Stop voice recording
103
- */
104
- async stopVoiceRecording() {
105
- if (this.state === SDKState.READY) {
106
- return { transcript: void 0 };
107
- }
108
- try {
109
- const result = { transcript: "Sample transcript" };
110
- this.setState(SDKState.READY);
111
- this.emitter.emit(EventType.VOICE_STOP, result);
112
- if (this.config.debug) {
113
- console.log("Voice recording stopped:", result);
114
- }
115
- return result;
116
- } catch (error) {
117
- this.handleError({
118
- code: "voice_stop_failed",
119
- message: "Failed to stop voice recording",
120
- details: error
121
- });
122
- return { transcript: void 0 };
123
- }
124
- }
125
- /**
126
- * Start screen capture
127
- */
128
- async startScreenCapture() {
129
- if (!this.screenCaptureEnabled) {
130
- this.handleError({
131
- code: "screen_capture_disabled",
132
- message: "Screen capture is not enabled or available"
133
- });
134
- return;
135
- }
136
- try {
137
- this.setState(SDKState.AGENT_SPEAKING);
138
- this.emitter.emit(EventType.SCREEN_CAPTURE_START);
139
- if (this.config.debug) {
140
- console.log("Screen capture started");
141
- }
142
- } catch (error) {
143
- this.handleError({
144
- code: "screen_capture_start_failed",
145
- message: "Failed to start screen capture",
146
- details: error
147
- });
148
- }
149
- }
150
- /**
151
- * Stop screen capture
152
- */
153
- async stopScreenCapture() {
154
- if (this.state === SDKState.READY) {
155
- return { screenshot: void 0 };
156
- }
157
- try {
158
- const result = { screenshot: "data:image/png;base64,..." };
159
- this.setState(SDKState.READY);
160
- this.emitter.emit(EventType.SCREEN_CAPTURE_STOP, result);
161
- if (this.config.debug) {
162
- console.log("Screen capture stopped");
163
- }
164
- return result;
165
- } catch (error) {
166
- this.handleError({
167
- code: "screen_capture_stop_failed",
168
- message: "Failed to stop screen capture",
169
- details: error
170
- });
171
- return { screenshot: void 0 };
172
- }
173
- }
174
- /**
175
- * Subscribe to SDK events
176
- */
177
- on(event, handler) {
178
- this.emitter.on(event, handler);
179
- }
180
- /**
181
- * Unsubscribe from SDK events
182
- */
183
- off(event, handler) {
184
- this.emitter.off(event, handler);
185
- }
186
- /**
187
- * Get current SDK state
188
- */
189
- getState() {
190
- return this.state;
191
- }
192
- /**
193
- * Cleanup and dispose SDK resources
194
- */
195
- dispose() {
196
- this.emitter.all.clear();
197
- if (this.config.debug) {
198
- console.log("ObiSDK disposed");
199
- }
200
- }
201
- }
202
- const registerWidget = () => {
203
- if (!customElements.get("obi-widget")) {
204
- customElements.define("obi-widget", ObiWidget);
205
- }
206
- };
207
- class ObiAssistant {
208
- /**
209
- * Initialize the Obi Widget with the provided configuration
210
- * This creates and mounts the widget to the page
211
- */
212
- static init(config) {
213
- registerWidget();
214
- const widget = document.createElement("obi-widget");
215
- if (config.apiKey) {
216
- widget.apiKey = config.apiKey;
217
- }
218
- if (config.position) {
219
- widget.position = config.position;
220
- }
221
- if (config.user) {
222
- widget.user = config.user;
223
- }
224
- window.obiWidgetConfig = config;
225
- document.body.appendChild(widget);
226
- console.log("Obi Widget initialized and mounted");
227
- return widget;
228
- }
229
- }
230
- export {
231
- ObiSDK as O,
232
- ObiAssistant as a
233
- };
234
- //# sourceMappingURL=assistant-5a47c1b4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistant-5a47c1b4.js","sources":["../../../src/core/sdk.ts","../../../src/core/assistant.ts"],"sourcesContent":["import mitt from \"mitt\"\n\nimport { EventType, ObiError, ObiSDKConfig, ObiSDKConfigSchema, SDKState } from \"./types\"\n\ntype Events = {\n [EventType.READY]: void\n [EventType.ERROR]: ObiError\n [EventType.VOICE_START]: void\n [EventType.VOICE_STOP]: { transcript?: string }\n [EventType.SCREEN_CAPTURE_START]: void\n [EventType.SCREEN_CAPTURE_STOP]: { screenshot?: string }\n [EventType.STATE_CHANGE]: SDKState\n}\n\nexport class ObiSDK {\n private config: ObiSDKConfig\n private state: SDKState = SDKState.READY\n private emitter = mitt<Events>()\n private voiceEnabled = false\n private screenCaptureEnabled = false\n\n constructor(config: Partial<ObiSDKConfig> = {}) {\n this.config = ObiSDKConfigSchema.parse(config)\n\n if (this.config.debug) {\n console.log(\"ObiSDK initialized with config:\", this.config)\n }\n }\n\n async init(): Promise<void> {\n try {\n if (this.config.enableVoice) {\n await this.initVoice()\n }\n\n if (this.config.enableScreenCapture) {\n await this.initScreenCapture()\n }\n\n this.setState(SDKState.READY)\n this.emitter.emit(EventType.READY)\n\n if (this.config.debug) {\n console.log(\"ObiSDK ready\")\n }\n } catch (error) {\n const sdkError: ObiError = {\n code: \"init_failed\",\n message: \"Failed to initialize SDK\",\n details: error,\n }\n this.handleError(sdkError)\n }\n }\n\n private async initVoice(): Promise<void> {\n // Check if browser supports required voice APIs\n if (!window.navigator.mediaDevices || !window.navigator.mediaDevices.getUserMedia) {\n throw new Error(\"Voice recording not supported in this browser\")\n }\n\n try {\n // Request microphone permissions\n await window.navigator.mediaDevices.getUserMedia({ audio: true })\n this.voiceEnabled = true\n\n if (this.config.debug) {\n console.log(\"Voice capabilities initialized\")\n }\n } catch (error) {\n throw new Error(`Microphone access denied: ${error}`)\n }\n }\n\n private async initScreenCapture(): Promise<void> {\n // Check if browser supports required screen capture APIs\n if (!window.navigator.mediaDevices || !window.navigator.mediaDevices.getDisplayMedia) {\n throw new Error(\"Screen capture not supported in this browser\")\n }\n\n this.screenCaptureEnabled = true\n\n if (this.config.debug) {\n console.log(\"Screen capture capabilities initialized\")\n }\n }\n\n /**\n * Set the SDK state and emit state change event\n */\n private setState(newState: SDKState): void {\n this.state = newState\n this.emitter.emit(EventType.STATE_CHANGE, newState)\n }\n\n /**\n * Handle SDK errors\n */\n private handleError(error: ObiError): void {\n this.setState(SDKState.ERROR)\n this.emitter.emit(EventType.ERROR, error)\n\n if (this.config.debug) {\n console.error(\"ObiSDK error:\", error)\n }\n }\n\n /**\n * Start voice recording\n */\n async startVoiceRecording(): Promise<void> {\n if (!this.voiceEnabled) {\n this.handleError({\n code: \"voice_disabled\",\n message: \"Voice recording is not enabled or available\",\n })\n return\n }\n\n try {\n this.setState(SDKState.AGENT_SPEAKING)\n this.emitter.emit(EventType.VOICE_START)\n\n if (this.config.debug) {\n console.log(\"Voice recording started\")\n }\n } catch (error) {\n this.handleError({\n code: \"voice_start_failed\",\n message: \"Failed to start voice recording\",\n details: error,\n })\n }\n }\n\n /**\n * Stop voice recording\n */\n async stopVoiceRecording(): Promise<{ transcript?: string }> {\n if (this.state === SDKState.READY) {\n return { transcript: undefined }\n }\n\n try {\n const result = { transcript: \"Sample transcript\" } // Placeholder for real implementation\n\n this.setState(SDKState.READY)\n this.emitter.emit(EventType.VOICE_STOP, result)\n\n if (this.config.debug) {\n console.log(\"Voice recording stopped:\", result)\n }\n\n return result\n } catch (error) {\n this.handleError({\n code: \"voice_stop_failed\",\n message: \"Failed to stop voice recording\",\n details: error,\n })\n return { transcript: undefined }\n }\n }\n\n /**\n * Start screen capture\n */\n async startScreenCapture(): Promise<void> {\n if (!this.screenCaptureEnabled) {\n this.handleError({\n code: \"screen_capture_disabled\",\n message: \"Screen capture is not enabled or available\",\n })\n return\n }\n\n try {\n this.setState(SDKState.AGENT_SPEAKING)\n this.emitter.emit(EventType.SCREEN_CAPTURE_START)\n\n if (this.config.debug) {\n console.log(\"Screen capture started\")\n }\n } catch (error) {\n this.handleError({\n code: \"screen_capture_start_failed\",\n message: \"Failed to start screen capture\",\n details: error,\n })\n }\n }\n\n /**\n * Stop screen capture\n */\n async stopScreenCapture(): Promise<{ screenshot?: string }> {\n if (this.state === SDKState.READY) {\n return { screenshot: undefined }\n }\n\n try {\n const result = { screenshot: \"data:image/png;base64,...\" } // Placeholder for real implementation\n\n this.setState(SDKState.READY)\n this.emitter.emit(EventType.SCREEN_CAPTURE_STOP, result)\n\n if (this.config.debug) {\n console.log(\"Screen capture stopped\")\n }\n\n return result\n } catch (error) {\n this.handleError({\n code: \"screen_capture_stop_failed\",\n message: \"Failed to stop screen capture\",\n details: error,\n })\n return { screenshot: undefined }\n }\n }\n\n /**\n * Subscribe to SDK events\n */\n on<E extends EventType>(event: E, handler: (data: Events[E]) => void): void {\n this.emitter.on(event, handler as any)\n }\n\n /**\n * Unsubscribe from SDK events\n */\n off<E extends EventType>(event: E, handler: (data: Events[E]) => void): void {\n this.emitter.off(event, handler as any)\n }\n\n /**\n * Get current SDK state\n */\n getState(): SDKState {\n return this.state\n }\n\n /**\n * Cleanup and dispose SDK resources\n */\n dispose(): void {\n this.emitter.all.clear()\n\n if (this.config.debug) {\n console.log(\"ObiSDK disposed\")\n }\n }\n}\n","/**\n * ObiAssistant provides a simple way to initialize the Obi Widget\n * with a single method call.\n */\n\nimport { ObiWidget } from \"../ui/components/obi-widget\"\n\n// Define the configuration interface\nexport interface ObiAssistantConfig {\n apiKey: string\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n user?: {\n id: string\n email?: string\n metadata?: Record<string, any>\n }\n}\n\n// Register the custom element if it hasn't been registered yet\nconst registerWidget = () => {\n if (!customElements.get(\"obi-widget\")) {\n customElements.define(\"obi-widget\", ObiWidget)\n }\n}\n\n/**\n * ObiAssistant class with static init method for easier initialization\n */\nexport class ObiAssistant {\n /**\n * Initialize the Obi Widget with the provided configuration\n * This creates and mounts the widget to the page\n */\n static init(config: ObiAssistantConfig): HTMLElement {\n // Make sure the widget is defined\n registerWidget()\n\n // Create widget instance\n const widget = document.createElement(\"obi-widget\") as ObiWidget\n\n // Set API key\n if (config.apiKey) {\n widget.apiKey = config.apiKey\n }\n\n // Set position if provided\n if (config.position) {\n widget.position = config.position\n }\n\n // Set user information if provided\n if (config.user) {\n widget.user = config.user\n }\n\n // Save config for access from anywhere\n window.obiWidgetConfig = config\n\n // Add the widget to the document body\n document.body.appendChild(widget)\n\n console.log(\"Obi Widget initialized and mounted\")\n\n return widget\n }\n}\n"],"names":[],"mappings":";;AAcO,MAAM,OAAO;AAAA,EAOlB,YAAY,SAAgC,IAAI;AALhD,SAAQ,QAAkB,SAAS;AACnC,SAAQ,UAAU;AAClB,SAAQ,eAAe;AACvB,SAAQ,uBAAuB;AAGxB,SAAA,SAAS,mBAAmB,MAAM,MAAM;AAEzC,QAAA,KAAK,OAAO,OAAO;AACb,cAAA,IAAI,mCAAmC,KAAK,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AACtB,QAAA;AACE,UAAA,KAAK,OAAO,aAAa;AAC3B,cAAM,KAAK;MACb;AAEI,UAAA,KAAK,OAAO,qBAAqB;AACnC,cAAM,KAAK;MACb;AAEK,WAAA,SAAS,SAAS,KAAK;AACvB,WAAA,QAAQ,KAAK,UAAU,KAAK;AAE7B,UAAA,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,cAAc;AAAA,MAC5B;AAAA,aACO,OAAO;AACd,YAAM,WAAqB;AAAA,QACzB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAEX,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,YAA2B;AAEnC,QAAA,CAAC,OAAO,UAAU,gBAAgB,CAAC,OAAO,UAAU,aAAa,cAAc;AAC3E,YAAA,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAEI,QAAA;AAEF,YAAM,OAAO,UAAU,aAAa,aAAa,EAAE,OAAO,MAAM;AAChE,WAAK,eAAe;AAEhB,UAAA,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,gCAAgC;AAAA,MAC9C;AAAA,aACO,OAAO;AACd,YAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAc,oBAAmC;AAE3C,QAAA,CAAC,OAAO,UAAU,gBAAgB,CAAC,OAAO,UAAU,aAAa,iBAAiB;AAC9E,YAAA,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAEA,SAAK,uBAAuB;AAExB,QAAA,KAAK,OAAO,OAAO;AACrB,cAAQ,IAAI,yCAAyC;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAS,UAA0B;AACzC,SAAK,QAAQ;AACb,SAAK,QAAQ,KAAK,UAAU,cAAc,QAAQ;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAuB;AACpC,SAAA,SAAS,SAAS,KAAK;AAC5B,SAAK,QAAQ,KAAK,UAAU,OAAO,KAAK;AAEpC,QAAA,KAAK,OAAO,OAAO;AACb,cAAA,MAAM,iBAAiB,KAAK;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAqC;AACrC,QAAA,CAAC,KAAK,cAAc;AACtB,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AACD;AAAA,IACF;AAEI,QAAA;AACG,WAAA,SAAS,SAAS,cAAc;AAChC,WAAA,QAAQ,KAAK,UAAU,WAAW;AAEnC,UAAA,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,yBAAyB;AAAA,MACvC;AAAA,aACO,OAAO;AACd,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAuD;AACvD,QAAA,KAAK,UAAU,SAAS,OAAO;AAC1B,aAAA,EAAE,YAAY;IACvB;AAEI,QAAA;AACI,YAAA,SAAS,EAAE,YAAY;AAExB,WAAA,SAAS,SAAS,KAAK;AAC5B,WAAK,QAAQ,KAAK,UAAU,YAAY,MAAM;AAE1C,UAAA,KAAK,OAAO,OAAO;AACb,gBAAA,IAAI,4BAA4B,MAAM;AAAA,MAChD;AAEO,aAAA;AAAA,aACA,OAAO;AACd,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACV;AACM,aAAA,EAAE,YAAY;IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAoC;AACpC,QAAA,CAAC,KAAK,sBAAsB;AAC9B,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AACD;AAAA,IACF;AAEI,QAAA;AACG,WAAA,SAAS,SAAS,cAAc;AAChC,WAAA,QAAQ,KAAK,UAAU,oBAAoB;AAE5C,UAAA,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,wBAAwB;AAAA,MACtC;AAAA,aACO,OAAO;AACd,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAsD;AACtD,QAAA,KAAK,UAAU,SAAS,OAAO;AAC1B,aAAA,EAAE,YAAY;IACvB;AAEI,QAAA;AACI,YAAA,SAAS,EAAE,YAAY;AAExB,WAAA,SAAS,SAAS,KAAK;AAC5B,WAAK,QAAQ,KAAK,UAAU,qBAAqB,MAAM;AAEnD,UAAA,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,wBAAwB;AAAA,MACtC;AAEO,aAAA;AAAA,aACA,OAAO;AACd,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACV;AACM,aAAA,EAAE,YAAY;IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,GAAwB,OAAU,SAA0C;AACrE,SAAA,QAAQ,GAAG,OAAO,OAAc;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAyB,OAAU,SAA0C;AACtE,SAAA,QAAQ,IAAI,OAAO,OAAc;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACT,SAAA,QAAQ,IAAI;AAEb,QAAA,KAAK,OAAO,OAAO;AACrB,cAAQ,IAAI,iBAAiB;AAAA,IAC/B;AAAA,EACF;AACF;ACzOA,MAAM,iBAAiB,MAAM;AAC3B,MAAI,CAAC,eAAe,IAAI,YAAY,GAAG;AACtB,mBAAA,OAAO,cAAc,SAAS;AAAA,EAC/C;AACF;AAKO,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,OAAO,KAAK,QAAyC;AAEpC;AAGT,UAAA,SAAS,SAAS,cAAc,YAAY;AAGlD,QAAI,OAAO,QAAQ;AACjB,aAAO,SAAS,OAAO;AAAA,IACzB;AAGA,QAAI,OAAO,UAAU;AACnB,aAAO,WAAW,OAAO;AAAA,IAC3B;AAGA,QAAI,OAAO,MAAM;AACf,aAAO,OAAO,OAAO;AAAA,IACvB;AAGA,WAAO,kBAAkB;AAGhB,aAAA,KAAK,YAAY,MAAM;AAEhC,YAAQ,IAAI,oCAAoC;AAEzC,WAAA;AAAA,EACT;AACF;"}
@@ -1,2 +0,0 @@
1
- var ObiWidgetLoader=function(n){"use strict";const r="https://www.iamobi.ai/api/",d={position:"bottom-right",autoInit:!0};class s{constructor(t={}){this.config={...d,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,e)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(i=>{const o=document.createElement("script");o.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${i||"latest"}/dist/obi-sdk.standalone.iife.js`;o.src=c,o.dataset.obiSdk="true",o.onload=()=>t(),o.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(o)}).catch(()=>{const i=document.createElement("script");i.type="text/javascript",i.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",i.dataset.obiSdk="true",i.onload=()=>t(),i.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(i)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",r),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:r};try{const e=new window.ObiSDK(t);window.obiSDKInstance=e}catch(e){console.error("Failed to initialize SDK:",e)}}}initialize(){this.init()}getWidget(){return this.widget}}return document.addEventListener("DOMContentLoaded",()=>{const a=window.obiWidgetConfig||{};new s(a)}),n.ObiWidgetLoader=s,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),n}({});
2
- //# sourceMappingURL=obi-loader.iife.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obi-loader.iife.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"6CAwBA,MAAMA,EAAe,6BAGfC,EAAkC,CACtC,SAAU,eACV,SAAU,EACZ,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KAGV,KAAK,OAAO,WAAa,IAC3B,KAAK,KAAK,CAEd,CAEA,MAAc,MAAO,CACf,GAAA,CACF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAGA,KAAK,mBAAmB,EACrB,KAAME,GAAY,CACX,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADMF,GAAW,QACwB,mCAExDC,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,EACA,MAAM,IAAM,CAEL,MAAAA,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,mEACbA,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAC/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,CAAA,CACJ,CACH,CAGA,MAAc,oBAA6C,CACrD,GAAA,CACI,MAAAE,EAAW,MAAM,MAAM,2CAA2C,EACxE,OAAIA,EAAS,IACE,MAAMA,EAAS,QAChB,QAEP,WACAN,EAAO,CACN,eAAA,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAO,EAAS,SAAS,cAAc,YAAY,EAG9C,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI5CA,EAAA,aAAa,eAAgBX,CAAY,EAG5C,KAAK,OAAO,UACdW,EAAO,aAAa,WAAY,KAAK,OAAO,QAAQ,EAIlD,KAAK,OAAO,MACdA,EAAO,aAAa,OAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,EAIrD,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAElB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMR,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAYH,CAAA,EAGV,GAAA,CACF,MAAMY,EAAmB,IAAK,OAAe,OAAOT,CAAM,EAExD,OAAe,eAAiBS,QAC3BR,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,YAAmB,CACxB,KAAK,KAAK,CACZ,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,gBAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"obi-loader.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- (function(o,n){typeof exports=="object"&&typeof module<"u"?n(exports):typeof define=="function"&&define.amd?define(["exports"],n):(o=typeof globalThis<"u"?globalThis:o||self,n(o.ObiWidgetLoader={}))})(this,function(o){"use strict";const n="https://www.iamobi.ai/api/",a={position:"bottom-right",autoInit:!0};class r{constructor(t={}){this.config={...a,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,i)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(e=>{const s=document.createElement("script");s.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${e||"latest"}/dist/obi-sdk.standalone.iife.js`;s.src=c,s.dataset.obiSdk="true",s.onload=()=>t(),s.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(s)}).catch(()=>{const e=document.createElement("script");e.type="text/javascript",e.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",e.dataset.obiSdk="true",e.onload=()=>t(),e.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(e)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",n),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:n};try{const i=new window.ObiSDK(t);window.obiSDKInstance=i}catch(i){console.error("Failed to initialize SDK:",i)}}}initialize(){this.init()}getWidget(){return this.widget}}document.addEventListener("DOMContentLoaded",()=>{const d=window.obiWidgetConfig||{};new r(d)}),o.ObiWidgetLoader=r,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=obi-loader.umd.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obi-loader.umd.cjs","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"uOAwBA,MAAMA,EAAe,6BAGfC,EAAkC,CACtC,SAAU,eACV,SAAU,EACZ,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KAGV,KAAK,OAAO,WAAa,IAC3B,KAAK,KAAK,CAEd,CAEA,MAAc,MAAO,CACf,GAAA,CACF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAGA,KAAK,mBAAmB,EACrB,KAAME,GAAY,CACX,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADMF,GAAW,QACwB,mCAExDC,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,EACA,MAAM,IAAM,CAEL,MAAAA,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,mEACbA,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAC/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,CAAA,CACJ,CACH,CAGA,MAAc,oBAA6C,CACrD,GAAA,CACI,MAAAE,EAAW,MAAM,MAAM,2CAA2C,EACxE,OAAIA,EAAS,IACE,MAAMA,EAAS,QAChB,QAEP,WACAN,EAAO,CACN,eAAA,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAO,EAAS,SAAS,cAAc,YAAY,EAG9C,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI5CA,EAAA,aAAa,eAAgBX,CAAY,EAG5C,KAAK,OAAO,UACdW,EAAO,aAAa,WAAY,KAAK,OAAO,QAAQ,EAIlD,KAAK,OAAO,MACdA,EAAO,aAAa,OAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,EAIrD,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAElB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMR,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAYH,CAAA,EAGV,GAAA,CACF,MAAMY,EAAmB,IAAK,OAAe,OAAOT,CAAM,EAExD,OAAe,eAAiBS,QAC3BR,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,YAAmB,CACxB,KAAK,KAAK,CACZ,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,SAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}