sgiant-ai-widget 1.12.8 → 1.14.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 +44 -7
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -15
- package/dist/index.js.map +1 -1
- package/dist/labels.d.ts +4 -0
- package/dist/labels.d.ts.map +1 -1
- package/dist/labels.js +6 -0
- package/dist/labels.js.map +1 -1
- package/dist/sgiant-ai-widget-charts.global.js +1 -1
- package/dist/sgiant-ai-widget.global.js +31 -23
- package/dist/sgiant-ai-widget.global.js.map +3 -3
- package/dist/specs.d.ts +18 -0
- package/dist/specs.d.ts.map +1 -1
- package/dist/specs.js +17 -0
- package/dist/specs.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +10 -2
- package/dist/styles.js.map +1 -1
- package/dist/ui-render.d.ts.map +1 -1
- package/dist/ui-render.js +7 -1
- package/dist/ui-render.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -230,16 +230,53 @@ plus `{type:"thread",threadId}`, `{type:"error",message}`, `{type:"done"}`.
|
|
|
230
230
|
|
|
231
231
|
## Security
|
|
232
232
|
|
|
233
|
-
The widget holds no long-lived secret
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
233
|
+
The widget holds no long-lived secret. In-app surfaces pass a Clerk session
|
|
234
|
+
token; external sites pass no token at all — they identify themselves with a
|
|
235
|
+
**public site key** in the POST body (`extraBody: { siteKey }`), which the
|
|
236
|
+
backend verifies against the paired site and rate-limits per site on top of
|
|
237
|
+
the per-IP ceiling. An unknown or inactive key is a 403, never a silent fall
|
|
238
|
+
back to anonymous. The backend's OBO scoping is the real ceiling; this is
|
|
239
|
+
presentation only.
|
|
240
|
+
|
|
241
|
+
This section said until 2026-09-22 that external sites use "a short-lived
|
|
242
|
+
embed token" and that the endpoint minting it "is the next backend step".
|
|
243
|
+
There is no such endpoint and there never was: the site-key design shipped
|
|
244
|
+
instead (sgiant-platform#339), and the `sgiant-connect` WordPress plugin has
|
|
245
|
+
been emitting `extraBody: { siteKey: … }` since.
|
|
237
246
|
|
|
238
247
|
## External embedding
|
|
239
248
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
249
|
+
The single-file IIFE build ships: `npm run build:global` writes
|
|
250
|
+
`dist/sgiant-ai-widget.global.js`, exposed as the `./global` export and as
|
|
251
|
+
`window.SgiantAiWidget` (see "As a `<script>` tag" above) — NOT
|
|
252
|
+
`window.SgiantChat`, which never existed. A third-party page needs no token:
|
|
253
|
+
pass its public site key and the endpoint does the rest — see *Security*.
|
|
254
|
+
|
|
255
|
+
```html
|
|
256
|
+
<script src="https://unpkg.com/sgiant-ai-widget/dist/sgiant-ai-widget.global.js"></script>
|
|
257
|
+
<script>
|
|
258
|
+
SgiantAiWidget.createAiChatWidget({
|
|
259
|
+
endpoint: "https://api.example.com/public/ai/chat",
|
|
260
|
+
extraBody: { siteKey: "…" },
|
|
261
|
+
});
|
|
262
|
+
</script>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Flagging a conversation
|
|
266
|
+
|
|
267
|
+
Pass `onFlag` to put a flag control in the header: clicking it asks for a
|
|
268
|
+
reason and calls back with the reason plus the live thread id. Wire it to a
|
|
269
|
+
flags API (`POST /admin/ai/conversations/:kind/:threadId/flag` for staff
|
|
270
|
+
surfaces, `POST /public/ai/threads/:threadId/flag` for the visitor widget).
|
|
271
|
+
Omit it and the control does not render.
|
|
272
|
+
|
|
273
|
+
## The surface manifest (`sgiant-ai-widget/manifest`)
|
|
274
|
+
|
|
275
|
+
An opt-in entry point re-exporting the bridge's `generateManifest`,
|
|
276
|
+
`verifySurface`, `canAct` and `hashManifest`. It is separate on purpose: the
|
|
277
|
+
core is one runtime dependency with no React, and a host that never generates
|
|
278
|
+
or verifies a manifest should pay nothing for the machinery. Importing the
|
|
279
|
+
main entry pulls none of it.
|
|
243
280
|
|
|
244
281
|
## About the `#123` references in the source
|
|
245
282
|
|
package/dist/index.d.ts
CHANGED
|
@@ -199,7 +199,8 @@ export interface AiChatWidgetOptions {
|
|
|
199
199
|
toolRoles?: Record<string, string>;
|
|
200
200
|
/** Host action name -> role id. Flips the badge when the action is invoked. */
|
|
201
201
|
actionRoles?: Record<string, string>;
|
|
202
|
-
/** Bearer token (Clerk session
|
|
202
|
+
/** Bearer token (a Clerk session token). Use getToken for refresh. External
|
|
203
|
+
* sites send no token — they pass a public site key in `extraBody`. */
|
|
203
204
|
token?: string;
|
|
204
205
|
/** Async token provider — called before each send (overrides `token`). */
|
|
205
206
|
getToken?: () => string | Promise<string>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -898,22 +898,8 @@ export function createAiChatWidget(opts) {
|
|
|
898
898
|
flagNote(L("flagSendFirst"), false);
|
|
899
899
|
return;
|
|
900
900
|
}
|
|
901
|
-
const reason = window.prompt(L("flagPrompt"));
|
|
902
|
-
if (!reason || !reason.trim())
|
|
903
|
-
return;
|
|
904
901
|
flagItem.btn.disabled = true;
|
|
905
|
-
|
|
906
|
-
.then(() => {
|
|
907
|
-
// Visible confirmation — a tooltip change alone is invisible, so the
|
|
908
|
-
// user couldn't tell the flag worked.
|
|
909
|
-
flagNote(L("flagged"), true);
|
|
910
|
-
})
|
|
911
|
-
.catch((err) => {
|
|
912
|
-
flagNote(L("flagFailed", {
|
|
913
|
-
msg: err?.message || L("flagFailedGeneric"),
|
|
914
|
-
}), false);
|
|
915
|
-
})
|
|
916
|
-
.finally(() => {
|
|
902
|
+
flagForm(threadId, () => {
|
|
917
903
|
flagItem.btn.disabled = false;
|
|
918
904
|
});
|
|
919
905
|
});
|
|
@@ -1803,6 +1789,96 @@ export function createAiChatWidget(opts) {
|
|
|
1803
1789
|
// Auto-dismiss the ephemeral notice so it doesn't clutter the transcript.
|
|
1804
1790
|
setTimeout(() => note.remove(), 6000);
|
|
1805
1791
|
}
|
|
1792
|
+
/**
|
|
1793
|
+
* Ask for the flag reason INLINE, in the transcript, and hand it to the host.
|
|
1794
|
+
*
|
|
1795
|
+
* This was `window.prompt` until 2026-09-22 (#433), and a native prompt is
|
|
1796
|
+
* wrong here in three separate ways: it freezes the renderer (browser
|
|
1797
|
+
* automation could not type into it, and the Chrome extension timed out on
|
|
1798
|
+
* every call until the tab was closed), it is the only native dialog
|
|
1799
|
+
* anywhere in the product so it cannot be themed or translated past its
|
|
1800
|
+
* label, and some embedding contexts block `window.prompt` outright — where
|
|
1801
|
+
* the flag would then silently do nothing.
|
|
1802
|
+
*
|
|
1803
|
+
* The host contract does not move: `onFlag({ reason, threadId })` is called
|
|
1804
|
+
* with exactly what the prompt used to return, and the result still lands in
|
|
1805
|
+
* `flagNote`. `done()` re-enables the menu item whatever the outcome.
|
|
1806
|
+
*/
|
|
1807
|
+
function flagForm(threadId, done) {
|
|
1808
|
+
const wrap = el("div", `${PREFIX}-lead ${PREFIX}-flag-form`);
|
|
1809
|
+
const title = el("div", `${PREFIX}-form-title`);
|
|
1810
|
+
title.textContent = L("flagPrompt");
|
|
1811
|
+
wrap.appendChild(title);
|
|
1812
|
+
const f = el("form", `${PREFIX}-lead-form`);
|
|
1813
|
+
const input = el("textarea", `${PREFIX}-field`);
|
|
1814
|
+
input.rows = 2;
|
|
1815
|
+
input.placeholder = L("flagReasonPlaceholder");
|
|
1816
|
+
f.appendChild(input);
|
|
1817
|
+
const row = el("div", `${PREFIX}-flag-row`);
|
|
1818
|
+
const submit = el("button", `${PREFIX}-lead-btn`);
|
|
1819
|
+
submit.type = "submit";
|
|
1820
|
+
submit.textContent = L("flagSubmit");
|
|
1821
|
+
const cancel = el("button", `${PREFIX}-edit-cancel`);
|
|
1822
|
+
cancel.type = "button";
|
|
1823
|
+
cancel.textContent = L("cancel");
|
|
1824
|
+
row.appendChild(cancel);
|
|
1825
|
+
row.appendChild(submit);
|
|
1826
|
+
f.appendChild(row);
|
|
1827
|
+
wrap.appendChild(f);
|
|
1828
|
+
log.appendChild(wrap);
|
|
1829
|
+
scrollDown(true);
|
|
1830
|
+
// Focus after the node is in the tree, or there is nothing to focus.
|
|
1831
|
+
input.focus();
|
|
1832
|
+
const close = () => {
|
|
1833
|
+
wrap.remove();
|
|
1834
|
+
done();
|
|
1835
|
+
};
|
|
1836
|
+
cancel.addEventListener("click", close);
|
|
1837
|
+
// Enter sends, Shift+Enter writes a second line — the composer's own rule,
|
|
1838
|
+
// so the reason field does not behave differently from every other box in
|
|
1839
|
+
// this panel. Escape is the keyboard half of Cancel.
|
|
1840
|
+
input.addEventListener("keydown", (e) => {
|
|
1841
|
+
if (e.key === "Escape") {
|
|
1842
|
+
e.preventDefault();
|
|
1843
|
+
close();
|
|
1844
|
+
}
|
|
1845
|
+
else if (e.key === "Enter" && !e.shiftKey) {
|
|
1846
|
+
e.preventDefault();
|
|
1847
|
+
f.requestSubmit();
|
|
1848
|
+
}
|
|
1849
|
+
});
|
|
1850
|
+
f.addEventListener("submit", (e) => {
|
|
1851
|
+
e.preventDefault();
|
|
1852
|
+
const reason = input.value.trim();
|
|
1853
|
+
// No reason, no flag — and say so on the control rather than closing the
|
|
1854
|
+
// form, which would read as "sent".
|
|
1855
|
+
if (!reason) {
|
|
1856
|
+
input.classList.add(`${PREFIX}-field-invalid`);
|
|
1857
|
+
input.focus();
|
|
1858
|
+
return;
|
|
1859
|
+
}
|
|
1860
|
+
input.classList.remove(`${PREFIX}-field-invalid`);
|
|
1861
|
+
submit.disabled = true;
|
|
1862
|
+
submit.textContent = L("sending");
|
|
1863
|
+
Promise.resolve(opts.onFlag({ reason, threadId }))
|
|
1864
|
+
.then(() => {
|
|
1865
|
+
wrap.remove();
|
|
1866
|
+
// Visible confirmation — a tooltip change alone is invisible, so the
|
|
1867
|
+
// user couldn't tell the flag worked.
|
|
1868
|
+
flagNote(L("flagged"), true);
|
|
1869
|
+
done();
|
|
1870
|
+
})
|
|
1871
|
+
.catch((err) => {
|
|
1872
|
+
// The form STAYS, with the text still in it: a failed send that
|
|
1873
|
+
// throws the reason away makes the user retype it.
|
|
1874
|
+
submit.disabled = false;
|
|
1875
|
+
submit.textContent = L("flagSubmit");
|
|
1876
|
+
flagNote(L("flagFailed", {
|
|
1877
|
+
msg: err?.message || L("flagFailedGeneric"),
|
|
1878
|
+
}), false);
|
|
1879
|
+
});
|
|
1880
|
+
});
|
|
1881
|
+
}
|
|
1806
1882
|
// Token meter — shown only for the free visitor preview (when signupUrl is
|
|
1807
1883
|
// set). Surfaces remaining allowance + tokens used this browser session.
|
|
1808
1884
|
const meterEl = el("div", `${PREFIX}-meter`);
|