@primexperts.co/pulse-agent 1.0.1 → 1.0.2
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
CHANGED
|
@@ -16,6 +16,8 @@ import { createPulseAgent } from '@primexperts/pulse-agent';
|
|
|
16
16
|
const agent = createPulseAgent({
|
|
17
17
|
slug: 'client-abc',
|
|
18
18
|
apiBaseUrl: 'https://api.pulsecrm.com',
|
|
19
|
+
dashboardUrl: 'http://localhost:4200',
|
|
20
|
+
dashboardSetupPath: '/integrations',
|
|
19
21
|
requireProfile: true,
|
|
20
22
|
autoOpen: false
|
|
21
23
|
});
|
|
@@ -49,6 +51,8 @@ agent.open();
|
|
|
49
51
|
Options:
|
|
50
52
|
- `slug` (required): public organization slug.
|
|
51
53
|
- `apiBaseUrl` (optional): defaults to `http://localhost:9091`.
|
|
54
|
+
- `dashboardUrl` (optional): defaults to `http://localhost:4200`.
|
|
55
|
+
- `dashboardSetupPath` (optional): defaults to `/integrations`.
|
|
52
56
|
- `mount` (optional): container element or selector, defaults to `document.body`.
|
|
53
57
|
- `autoOpen` (optional): open panel immediately.
|
|
54
58
|
- `requireProfile` (optional): requires name/email before first message, default `true`.
|
|
@@ -65,6 +69,7 @@ Returns `PulseAgentHandle`:
|
|
|
65
69
|
|
|
66
70
|
- This package is framework-agnostic and browser-only.
|
|
67
71
|
- No dashboard/auth code is included in this project.
|
|
72
|
+
- If widget keys are missing or auth is required, the chat shows a setup gate and opens dashboard setup in a new tab.
|
|
68
73
|
- `npm run build` now outputs:
|
|
69
74
|
- ESM + type declarations in `dist/`
|
|
70
75
|
- browser global bundle in `dist/browser/pulse-agent.global.js`
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const DEFAULT_API_BASE_URL = 'http://localhost:9091';
|
|
2
|
+
const DEFAULT_DASHBOARD_URL = 'http://localhost:4200';
|
|
3
|
+
const DEFAULT_DASHBOARD_SETUP_PATH = '/integrations';
|
|
2
4
|
const STYLE_ID = 'pulse-agent-widget-style';
|
|
3
5
|
function createPulseAgent(options) {
|
|
4
6
|
assertBrowser();
|
|
@@ -13,6 +15,9 @@ function createPulseAgent(options) {
|
|
|
13
15
|
const panel = root.querySelector('[data-role="panel"]');
|
|
14
16
|
const closeBtn = root.querySelector('[data-role="close"]');
|
|
15
17
|
const log = root.querySelector('[data-role="log"]');
|
|
18
|
+
const setupGate = root.querySelector('[data-role="setup-gate"]');
|
|
19
|
+
const setupText = root.querySelector('[data-role="setup-text"]');
|
|
20
|
+
const setupOpenBtn = root.querySelector('[data-role="setup-open"]');
|
|
16
21
|
const prechat = root.querySelector('[data-role="prechat"]');
|
|
17
22
|
const nameInput = root.querySelector('[data-role="name"]');
|
|
18
23
|
const emailInput = root.querySelector('[data-role="email"]');
|
|
@@ -20,6 +25,9 @@ function createPulseAgent(options) {
|
|
|
20
25
|
const textarea = root.querySelector('[data-role="message"]');
|
|
21
26
|
const sendBtn = root.querySelector('[data-role="send"]');
|
|
22
27
|
pushMessage(state, log, { role: 'system', content: 'Welcome to Pulse. Send us a message.' });
|
|
28
|
+
setupOpenBtn.addEventListener('click', () => {
|
|
29
|
+
window.open(getDashboardSetupUrl(state.options), '_blank', 'noopener,noreferrer');
|
|
30
|
+
});
|
|
23
31
|
button.addEventListener('click', () => toggle(panel, state));
|
|
24
32
|
closeBtn.addEventListener('click', () => close(panel, state));
|
|
25
33
|
continueBtn.addEventListener('click', () => {
|
|
@@ -37,12 +45,16 @@ function createPulseAgent(options) {
|
|
|
37
45
|
if (!text || state.sending) {
|
|
38
46
|
return;
|
|
39
47
|
}
|
|
48
|
+
if (state.setupRequired) {
|
|
49
|
+
pushMessage(state, log, { role: 'system', content: state.setupMessage || 'Complete setup first.' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
40
52
|
if (state.options.requireProfile !== false && !state.profile) {
|
|
41
53
|
pushMessage(state, log, { role: 'system', content: 'Complete profile first.' });
|
|
42
54
|
return;
|
|
43
55
|
}
|
|
44
56
|
if (!state.widgetToken) {
|
|
45
|
-
await resolveWidgetToken(state, log);
|
|
57
|
+
await resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn);
|
|
46
58
|
if (!state.widgetToken) {
|
|
47
59
|
return;
|
|
48
60
|
}
|
|
@@ -82,7 +94,7 @@ function createPulseAgent(options) {
|
|
|
82
94
|
sendBtn.disabled = false;
|
|
83
95
|
}
|
|
84
96
|
});
|
|
85
|
-
resolveWidgetToken(state, log).then(() => {
|
|
97
|
+
resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn).then(() => {
|
|
86
98
|
if (state.options.autoOpen) {
|
|
87
99
|
open(panel, state);
|
|
88
100
|
}
|
|
@@ -117,6 +129,10 @@ function template(title) {
|
|
|
117
129
|
</header>
|
|
118
130
|
<div class="pulse-agent-log" data-role="log"></div>
|
|
119
131
|
<div class="pulse-agent-compose">
|
|
132
|
+
<div class="pulse-agent-setup hidden" data-role="setup-gate">
|
|
133
|
+
<p data-role="setup-text">Setup is required before chat can start.</p>
|
|
134
|
+
<button data-role="setup-open" type="button">Open Dashboard To Get Keys</button>
|
|
135
|
+
</div>
|
|
120
136
|
<div class="pulse-agent-prechat" data-role="prechat">
|
|
121
137
|
<input data-role="name" type="text" placeholder="Your name" />
|
|
122
138
|
<input data-role="email" type="email" placeholder="Work email" />
|
|
@@ -146,6 +162,9 @@ function ensureStyle() {
|
|
|
146
162
|
.pulse-agent-bubble.agent { justify-self: start; background: #e2e8f0; color: #111827; }
|
|
147
163
|
.pulse-agent-bubble.system { justify-self: center; background: #fef9c3; color: #854d0e; }
|
|
148
164
|
.pulse-agent-compose { border-top: 1px solid #dbe2ea; padding: 10px; display: grid; gap: 8px; }
|
|
165
|
+
.pulse-agent-setup { display: grid; gap: 6px; border: 1px solid #facc15; border-radius: 10px; background: #fffbeb; padding: 10px; }
|
|
166
|
+
.pulse-agent-setup.hidden { display: none; }
|
|
167
|
+
.pulse-agent-setup p { margin: 0; color: #854d0e; font-size: 13px; }
|
|
149
168
|
.pulse-agent-prechat { display: grid; gap: 6px; }
|
|
150
169
|
.pulse-agent-prechat.hidden { display: none; }
|
|
151
170
|
.pulse-agent-compose textarea, .pulse-agent-prechat input { width: 100%; box-sizing: border-box; border: 1px solid #cbd5e1; border-radius: 8px; padding: 8px; font: inherit; }
|
|
@@ -163,7 +182,9 @@ function createState(options) {
|
|
|
163
182
|
stream: null,
|
|
164
183
|
messages: [],
|
|
165
184
|
opened: false,
|
|
166
|
-
sending: false
|
|
185
|
+
sending: false,
|
|
186
|
+
setupRequired: false,
|
|
187
|
+
setupMessage: ''
|
|
167
188
|
};
|
|
168
189
|
}
|
|
169
190
|
function normalizeOptions(options) {
|
|
@@ -174,6 +195,8 @@ function normalizeOptions(options) {
|
|
|
174
195
|
...options,
|
|
175
196
|
slug: options.slug.trim(),
|
|
176
197
|
apiBaseUrl: options.apiBaseUrl?.trim() || DEFAULT_API_BASE_URL,
|
|
198
|
+
dashboardUrl: options.dashboardUrl?.trim() || DEFAULT_DASHBOARD_URL,
|
|
199
|
+
dashboardSetupPath: options.dashboardSetupPath?.trim() || DEFAULT_DASHBOARD_SETUP_PATH,
|
|
177
200
|
autoOpen: options.autoOpen === true,
|
|
178
201
|
requireProfile: options.requireProfile !== false
|
|
179
202
|
};
|
|
@@ -191,25 +214,49 @@ function resolveMount(mount) {
|
|
|
191
214
|
}
|
|
192
215
|
return mount;
|
|
193
216
|
}
|
|
194
|
-
async function resolveWidgetToken(state, log) {
|
|
217
|
+
async function resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn) {
|
|
195
218
|
if (state.widgetToken) {
|
|
219
|
+
clearSetupRequired(state, setupGate, textarea, sendBtn);
|
|
196
220
|
return;
|
|
197
221
|
}
|
|
198
222
|
try {
|
|
199
223
|
const url = `${trimSlash(state.options.apiBaseUrl)}/api/pulse/public/webchat/resolve?slug=${encodeURIComponent(state.options.slug)}`;
|
|
200
224
|
const res = await fetch(url);
|
|
201
225
|
if (!res.ok) {
|
|
202
|
-
|
|
226
|
+
if (res.status === 401 || res.status === 403) {
|
|
227
|
+
throw new Error('Not authenticated. Sign in to Pulse Dashboard and configure Webchat keys.');
|
|
228
|
+
}
|
|
229
|
+
if (res.status === 404) {
|
|
230
|
+
throw new Error(`No active webchat widget for slug "${state.options.slug}". Enable Webchat and copy keys from Dashboard.`);
|
|
231
|
+
}
|
|
232
|
+
throw new Error(`Failed to resolve widget keys (${res.status}).`);
|
|
203
233
|
}
|
|
204
234
|
const body = (await res.json());
|
|
205
235
|
state.widgetToken = body.widgetToken;
|
|
236
|
+
clearSetupRequired(state, setupGate, textarea, sendBtn);
|
|
206
237
|
pushMessage(state, log, { role: 'system', content: `Connected to ${body.organizationName}.` });
|
|
207
238
|
}
|
|
208
239
|
catch (error) {
|
|
209
240
|
const message = error instanceof Error ? error.message : 'Failed to resolve widget token.';
|
|
241
|
+
setSetupRequired(state, setupGate, setupText, textarea, sendBtn, message);
|
|
210
242
|
pushMessage(state, log, { role: 'system', content: message });
|
|
211
243
|
}
|
|
212
244
|
}
|
|
245
|
+
function setSetupRequired(state, setupGate, setupText, textarea, sendBtn, message) {
|
|
246
|
+
state.setupRequired = true;
|
|
247
|
+
state.setupMessage = message;
|
|
248
|
+
setupText.textContent = `${message} Open dashboard to authenticate and get keys.`;
|
|
249
|
+
setupGate.classList.remove('hidden');
|
|
250
|
+
textarea.disabled = true;
|
|
251
|
+
sendBtn.disabled = true;
|
|
252
|
+
}
|
|
253
|
+
function clearSetupRequired(state, setupGate, textarea, sendBtn) {
|
|
254
|
+
state.setupRequired = false;
|
|
255
|
+
state.setupMessage = '';
|
|
256
|
+
setupGate.classList.add('hidden');
|
|
257
|
+
textarea.disabled = false;
|
|
258
|
+
sendBtn.disabled = false;
|
|
259
|
+
}
|
|
213
260
|
function connectStream(state, log) {
|
|
214
261
|
if (!state.widgetToken || !state.conversationId) {
|
|
215
262
|
return;
|
|
@@ -261,6 +308,11 @@ function close(panel, state) {
|
|
|
261
308
|
function trimSlash(value) {
|
|
262
309
|
return value.replace(/\/+$/, '');
|
|
263
310
|
}
|
|
311
|
+
function getDashboardSetupUrl(options) {
|
|
312
|
+
const base = trimSlash(options.dashboardUrl);
|
|
313
|
+
const path = options.dashboardSetupPath.startsWith('/') ? options.dashboardSetupPath : `/${options.dashboardSetupPath}`;
|
|
314
|
+
return `${base}${path}`;
|
|
315
|
+
}
|
|
264
316
|
function assertBrowser() {
|
|
265
317
|
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
266
318
|
throw new Error('PulseAgent: browser environment required.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulse-agent.d.ts","sourceRoot":"","sources":["../../src/widget/pulse-agent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"pulse-agent.d.ts","sourceRoot":"","sources":["../../src/widget/pulse-agent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CACnD;AAyBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAiI7E"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const DEFAULT_API_BASE_URL = 'http://localhost:9091';
|
|
2
|
+
const DEFAULT_DASHBOARD_URL = 'http://localhost:4200';
|
|
3
|
+
const DEFAULT_DASHBOARD_SETUP_PATH = '/integrations';
|
|
2
4
|
const STYLE_ID = 'pulse-agent-widget-style';
|
|
3
5
|
export function createPulseAgent(options) {
|
|
4
6
|
assertBrowser();
|
|
@@ -13,6 +15,9 @@ export function createPulseAgent(options) {
|
|
|
13
15
|
const panel = root.querySelector('[data-role="panel"]');
|
|
14
16
|
const closeBtn = root.querySelector('[data-role="close"]');
|
|
15
17
|
const log = root.querySelector('[data-role="log"]');
|
|
18
|
+
const setupGate = root.querySelector('[data-role="setup-gate"]');
|
|
19
|
+
const setupText = root.querySelector('[data-role="setup-text"]');
|
|
20
|
+
const setupOpenBtn = root.querySelector('[data-role="setup-open"]');
|
|
16
21
|
const prechat = root.querySelector('[data-role="prechat"]');
|
|
17
22
|
const nameInput = root.querySelector('[data-role="name"]');
|
|
18
23
|
const emailInput = root.querySelector('[data-role="email"]');
|
|
@@ -20,6 +25,9 @@ export function createPulseAgent(options) {
|
|
|
20
25
|
const textarea = root.querySelector('[data-role="message"]');
|
|
21
26
|
const sendBtn = root.querySelector('[data-role="send"]');
|
|
22
27
|
pushMessage(state, log, { role: 'system', content: 'Welcome to Pulse. Send us a message.' });
|
|
28
|
+
setupOpenBtn.addEventListener('click', () => {
|
|
29
|
+
window.open(getDashboardSetupUrl(state.options), '_blank', 'noopener,noreferrer');
|
|
30
|
+
});
|
|
23
31
|
button.addEventListener('click', () => toggle(panel, state));
|
|
24
32
|
closeBtn.addEventListener('click', () => close(panel, state));
|
|
25
33
|
continueBtn.addEventListener('click', () => {
|
|
@@ -37,12 +45,16 @@ export function createPulseAgent(options) {
|
|
|
37
45
|
if (!text || state.sending) {
|
|
38
46
|
return;
|
|
39
47
|
}
|
|
48
|
+
if (state.setupRequired) {
|
|
49
|
+
pushMessage(state, log, { role: 'system', content: state.setupMessage || 'Complete setup first.' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
40
52
|
if (state.options.requireProfile !== false && !state.profile) {
|
|
41
53
|
pushMessage(state, log, { role: 'system', content: 'Complete profile first.' });
|
|
42
54
|
return;
|
|
43
55
|
}
|
|
44
56
|
if (!state.widgetToken) {
|
|
45
|
-
await resolveWidgetToken(state, log);
|
|
57
|
+
await resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn);
|
|
46
58
|
if (!state.widgetToken) {
|
|
47
59
|
return;
|
|
48
60
|
}
|
|
@@ -82,7 +94,7 @@ export function createPulseAgent(options) {
|
|
|
82
94
|
sendBtn.disabled = false;
|
|
83
95
|
}
|
|
84
96
|
});
|
|
85
|
-
resolveWidgetToken(state, log).then(() => {
|
|
97
|
+
resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn).then(() => {
|
|
86
98
|
if (state.options.autoOpen) {
|
|
87
99
|
open(panel, state);
|
|
88
100
|
}
|
|
@@ -117,6 +129,10 @@ function template(title) {
|
|
|
117
129
|
</header>
|
|
118
130
|
<div class="pulse-agent-log" data-role="log"></div>
|
|
119
131
|
<div class="pulse-agent-compose">
|
|
132
|
+
<div class="pulse-agent-setup hidden" data-role="setup-gate">
|
|
133
|
+
<p data-role="setup-text">Setup is required before chat can start.</p>
|
|
134
|
+
<button data-role="setup-open" type="button">Open Dashboard To Get Keys</button>
|
|
135
|
+
</div>
|
|
120
136
|
<div class="pulse-agent-prechat" data-role="prechat">
|
|
121
137
|
<input data-role="name" type="text" placeholder="Your name" />
|
|
122
138
|
<input data-role="email" type="email" placeholder="Work email" />
|
|
@@ -146,6 +162,9 @@ function ensureStyle() {
|
|
|
146
162
|
.pulse-agent-bubble.agent { justify-self: start; background: #e2e8f0; color: #111827; }
|
|
147
163
|
.pulse-agent-bubble.system { justify-self: center; background: #fef9c3; color: #854d0e; }
|
|
148
164
|
.pulse-agent-compose { border-top: 1px solid #dbe2ea; padding: 10px; display: grid; gap: 8px; }
|
|
165
|
+
.pulse-agent-setup { display: grid; gap: 6px; border: 1px solid #facc15; border-radius: 10px; background: #fffbeb; padding: 10px; }
|
|
166
|
+
.pulse-agent-setup.hidden { display: none; }
|
|
167
|
+
.pulse-agent-setup p { margin: 0; color: #854d0e; font-size: 13px; }
|
|
149
168
|
.pulse-agent-prechat { display: grid; gap: 6px; }
|
|
150
169
|
.pulse-agent-prechat.hidden { display: none; }
|
|
151
170
|
.pulse-agent-compose textarea, .pulse-agent-prechat input { width: 100%; box-sizing: border-box; border: 1px solid #cbd5e1; border-radius: 8px; padding: 8px; font: inherit; }
|
|
@@ -163,7 +182,9 @@ function createState(options) {
|
|
|
163
182
|
stream: null,
|
|
164
183
|
messages: [],
|
|
165
184
|
opened: false,
|
|
166
|
-
sending: false
|
|
185
|
+
sending: false,
|
|
186
|
+
setupRequired: false,
|
|
187
|
+
setupMessage: ''
|
|
167
188
|
};
|
|
168
189
|
}
|
|
169
190
|
function normalizeOptions(options) {
|
|
@@ -174,6 +195,8 @@ function normalizeOptions(options) {
|
|
|
174
195
|
...options,
|
|
175
196
|
slug: options.slug.trim(),
|
|
176
197
|
apiBaseUrl: options.apiBaseUrl?.trim() || DEFAULT_API_BASE_URL,
|
|
198
|
+
dashboardUrl: options.dashboardUrl?.trim() || DEFAULT_DASHBOARD_URL,
|
|
199
|
+
dashboardSetupPath: options.dashboardSetupPath?.trim() || DEFAULT_DASHBOARD_SETUP_PATH,
|
|
177
200
|
autoOpen: options.autoOpen === true,
|
|
178
201
|
requireProfile: options.requireProfile !== false
|
|
179
202
|
};
|
|
@@ -191,25 +214,49 @@ function resolveMount(mount) {
|
|
|
191
214
|
}
|
|
192
215
|
return mount;
|
|
193
216
|
}
|
|
194
|
-
async function resolveWidgetToken(state, log) {
|
|
217
|
+
async function resolveWidgetToken(state, log, setupGate, setupText, textarea, sendBtn) {
|
|
195
218
|
if (state.widgetToken) {
|
|
219
|
+
clearSetupRequired(state, setupGate, textarea, sendBtn);
|
|
196
220
|
return;
|
|
197
221
|
}
|
|
198
222
|
try {
|
|
199
223
|
const url = `${trimSlash(state.options.apiBaseUrl)}/api/pulse/public/webchat/resolve?slug=${encodeURIComponent(state.options.slug)}`;
|
|
200
224
|
const res = await fetch(url);
|
|
201
225
|
if (!res.ok) {
|
|
202
|
-
|
|
226
|
+
if (res.status === 401 || res.status === 403) {
|
|
227
|
+
throw new Error('Not authenticated. Sign in to Pulse Dashboard and configure Webchat keys.');
|
|
228
|
+
}
|
|
229
|
+
if (res.status === 404) {
|
|
230
|
+
throw new Error(`No active webchat widget for slug "${state.options.slug}". Enable Webchat and copy keys from Dashboard.`);
|
|
231
|
+
}
|
|
232
|
+
throw new Error(`Failed to resolve widget keys (${res.status}).`);
|
|
203
233
|
}
|
|
204
234
|
const body = (await res.json());
|
|
205
235
|
state.widgetToken = body.widgetToken;
|
|
236
|
+
clearSetupRequired(state, setupGate, textarea, sendBtn);
|
|
206
237
|
pushMessage(state, log, { role: 'system', content: `Connected to ${body.organizationName}.` });
|
|
207
238
|
}
|
|
208
239
|
catch (error) {
|
|
209
240
|
const message = error instanceof Error ? error.message : 'Failed to resolve widget token.';
|
|
241
|
+
setSetupRequired(state, setupGate, setupText, textarea, sendBtn, message);
|
|
210
242
|
pushMessage(state, log, { role: 'system', content: message });
|
|
211
243
|
}
|
|
212
244
|
}
|
|
245
|
+
function setSetupRequired(state, setupGate, setupText, textarea, sendBtn, message) {
|
|
246
|
+
state.setupRequired = true;
|
|
247
|
+
state.setupMessage = message;
|
|
248
|
+
setupText.textContent = `${message} Open dashboard to authenticate and get keys.`;
|
|
249
|
+
setupGate.classList.remove('hidden');
|
|
250
|
+
textarea.disabled = true;
|
|
251
|
+
sendBtn.disabled = true;
|
|
252
|
+
}
|
|
253
|
+
function clearSetupRequired(state, setupGate, textarea, sendBtn) {
|
|
254
|
+
state.setupRequired = false;
|
|
255
|
+
state.setupMessage = '';
|
|
256
|
+
setupGate.classList.add('hidden');
|
|
257
|
+
textarea.disabled = false;
|
|
258
|
+
sendBtn.disabled = false;
|
|
259
|
+
}
|
|
213
260
|
function connectStream(state, log) {
|
|
214
261
|
if (!state.widgetToken || !state.conversationId) {
|
|
215
262
|
return;
|
|
@@ -261,6 +308,11 @@ function close(panel, state) {
|
|
|
261
308
|
function trimSlash(value) {
|
|
262
309
|
return value.replace(/\/+$/, '');
|
|
263
310
|
}
|
|
311
|
+
function getDashboardSetupUrl(options) {
|
|
312
|
+
const base = trimSlash(options.dashboardUrl);
|
|
313
|
+
const path = options.dashboardSetupPath.startsWith('/') ? options.dashboardSetupPath : `/${options.dashboardSetupPath}`;
|
|
314
|
+
return `${base}${path}`;
|
|
315
|
+
}
|
|
264
316
|
function assertBrowser() {
|
|
265
317
|
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
266
318
|
throw new Error('PulseAgent: browser environment required.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulse-agent.js","sourceRoot":"","sources":["../../src/widget/pulse-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pulse-agent.js","sourceRoot":"","sources":["../../src/widget/pulse-agent.ts"],"names":[],"mappings":"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"}
|