@talk2view/sdk 0.14.0 → 0.16.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 +336 -69
- package/dist/assistant-ui/convert.d.ts +40 -0
- package/dist/assistant-ui/convert.d.ts.map +1 -0
- package/dist/assistant-ui/convert.js +113 -0
- package/dist/assistant-ui/convert.js.map +1 -0
- package/dist/assistant-ui/dictation.d.ts +39 -0
- package/dist/assistant-ui/dictation.d.ts.map +1 -0
- package/dist/assistant-ui/dictation.js +128 -0
- package/dist/assistant-ui/dictation.js.map +1 -0
- package/dist/assistant-ui/index.d.ts +43 -0
- package/dist/assistant-ui/index.d.ts.map +1 -0
- package/dist/assistant-ui/index.js +227 -0
- package/dist/assistant-ui/index.js.map +1 -0
- package/dist/auth.d.ts +38 -3
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +101 -16
- package/dist/auth.js.map +1 -1
- package/dist/chat/auth-gate.d.ts +42 -0
- package/dist/chat/auth-gate.d.ts.map +1 -0
- package/dist/chat/auth-gate.js +93 -0
- package/dist/chat/auth-gate.js.map +1 -0
- package/dist/chat/chat.d.ts +36 -0
- package/dist/chat/chat.d.ts.map +1 -0
- package/dist/chat/chat.js +124 -0
- package/dist/chat/chat.js.map +1 -0
- package/dist/chat/composer-extras.d.ts +23 -0
- package/dist/chat/composer-extras.d.ts.map +1 -0
- package/dist/chat/composer-extras.js +48 -0
- package/dist/chat/composer-extras.js.map +1 -0
- package/dist/chat/hooks/use-attachment-src.d.ts +2 -0
- package/dist/chat/hooks/use-attachment-src.d.ts.map +1 -0
- package/dist/chat/hooks/use-attachment-src.js +38 -0
- package/dist/chat/hooks/use-attachment-src.js.map +1 -0
- package/dist/chat/hooks/use-copy-to-clipboard.d.ts +8 -0
- package/dist/chat/hooks/use-copy-to-clipboard.d.ts.map +1 -0
- package/dist/chat/hooks/use-copy-to-clipboard.js +16 -0
- package/dist/chat/hooks/use-copy-to-clipboard.js.map +1 -0
- package/dist/chat/index.d.ts +32 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +35 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/inject-styles.d.ts +2 -0
- package/dist/chat/inject-styles.d.ts.map +1 -0
- package/dist/chat/inject-styles.js +23 -0
- package/dist/chat/inject-styles.js.map +1 -0
- package/dist/chat/launcher.d.ts +37 -0
- package/dist/chat/launcher.d.ts.map +1 -0
- package/dist/chat/launcher.js +343 -0
- package/dist/chat/launcher.js.map +1 -0
- package/dist/chat/lib/cn.d.ts +19 -0
- package/dist/chat/lib/cn.d.ts.map +1 -0
- package/dist/chat/lib/cn.js +20 -0
- package/dist/chat/lib/cn.js.map +1 -0
- package/dist/chat/lib/dictation-phase.d.ts +9 -0
- package/dist/chat/lib/dictation-phase.d.ts.map +1 -0
- package/dist/chat/lib/dictation-phase.js +33 -0
- package/dist/chat/lib/dictation-phase.js.map +1 -0
- package/dist/chat/lib/guard.d.ts +4 -0
- package/dist/chat/lib/guard.d.ts.map +1 -0
- package/dist/chat/lib/guard.js +41 -0
- package/dist/chat/lib/guard.js.map +1 -0
- package/dist/chat/lib/launcher-variant.d.ts +33 -0
- package/dist/chat/lib/launcher-variant.d.ts.map +1 -0
- package/dist/chat/lib/launcher-variant.js +109 -0
- package/dist/chat/lib/launcher-variant.js.map +1 -0
- package/dist/chat/lib/portal-host.d.ts +13 -0
- package/dist/chat/lib/portal-host.d.ts.map +1 -0
- package/dist/chat/lib/portal-host.js +58 -0
- package/dist/chat/lib/portal-host.js.map +1 -0
- package/dist/chat/markdown.d.ts +32 -0
- package/dist/chat/markdown.d.ts.map +1 -0
- package/dist/chat/markdown.js +18 -0
- package/dist/chat/markdown.js.map +1 -0
- package/dist/chat/provider.d.ts +113 -0
- package/dist/chat/provider.d.ts.map +1 -0
- package/dist/chat/provider.js +176 -0
- package/dist/chat/provider.js.map +1 -0
- package/dist/chat/tool-fallback.d.ts +39 -0
- package/dist/chat/tool-fallback.d.ts.map +1 -0
- package/dist/chat/tool-fallback.js +167 -0
- package/dist/chat/tool-fallback.js.map +1 -0
- package/dist/chat/ui/avatar.d.ts +12 -0
- package/dist/chat/ui/avatar.d.ts.map +1 -0
- package/dist/chat/ui/avatar.js +24 -0
- package/dist/chat/ui/avatar.js.map +1 -0
- package/dist/chat/ui/button.d.ts +9 -0
- package/dist/chat/ui/button.d.ts.map +1 -0
- package/dist/chat/ui/button.js +35 -0
- package/dist/chat/ui/button.js.map +1 -0
- package/dist/chat/ui/collapsible.d.ts +6 -0
- package/dist/chat/ui/collapsible.d.ts.map +1 -0
- package/dist/chat/ui/collapsible.js +13 -0
- package/dist/chat/ui/collapsible.js.map +1 -0
- package/dist/chat/ui/dialog.d.ts +18 -0
- package/dist/chat/ui/dialog.d.ts.map +1 -0
- package/dist/chat/ui/dialog.js +42 -0
- package/dist/chat/ui/dialog.js.map +1 -0
- package/dist/chat/ui/input.d.ts +4 -0
- package/dist/chat/ui/input.d.ts.map +1 -0
- package/dist/chat/ui/input.js +8 -0
- package/dist/chat/ui/input.js.map +1 -0
- package/dist/chat/ui/skeleton.d.ts +3 -0
- package/dist/chat/ui/skeleton.d.ts.map +1 -0
- package/dist/chat/ui/skeleton.js +7 -0
- package/dist/chat/ui/skeleton.js.map +1 -0
- package/dist/chat/ui/textarea.d.ts +4 -0
- package/dist/chat/ui/textarea.d.ts.map +1 -0
- package/dist/chat/ui/textarea.js +7 -0
- package/dist/chat/ui/textarea.js.map +1 -0
- package/dist/chat/ui/tooltip.d.ts +7 -0
- package/dist/chat/ui/tooltip.d.ts.map +1 -0
- package/dist/chat/ui/tooltip.js +22 -0
- package/dist/chat/ui/tooltip.js.map +1 -0
- package/dist/chat/vendor/attachment.aui.d.ts +5 -0
- package/dist/chat/vendor/attachment.aui.d.ts.map +1 -0
- package/dist/chat/vendor/attachment.aui.js +79 -0
- package/dist/chat/vendor/attachment.aui.js.map +1 -0
- package/dist/chat/vendor/file.d.ts +41 -0
- package/dist/chat/vendor/file.d.ts.map +1 -0
- package/dist/chat/vendor/file.js +137 -0
- package/dist/chat/vendor/file.js.map +1 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.d.ts +3 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.d.ts.map +1 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.js +45 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.js.map +1 -0
- package/dist/chat/vendor/image.d.ts +47 -0
- package/dist/chat/vendor/image.d.ts.map +1 -0
- package/dist/chat/vendor/image.js +258 -0
- package/dist/chat/vendor/image.js.map +1 -0
- package/dist/chat/vendor/markdown-text.d.ts +8 -0
- package/dist/chat/vendor/markdown-text.d.ts.map +1 -0
- package/dist/chat/vendor/markdown-text.js +73 -0
- package/dist/chat/vendor/markdown-text.js.map +1 -0
- package/dist/chat/vendor/reasoning.aui.d.ts +22 -0
- package/dist/chat/vendor/reasoning.aui.d.ts.map +1 -0
- package/dist/chat/vendor/reasoning.aui.js +56 -0
- package/dist/chat/vendor/reasoning.aui.js.map +1 -0
- package/dist/chat/vendor/reasoning.d.ts +35 -0
- package/dist/chat/vendor/reasoning.d.ts.map +1 -0
- package/dist/chat/vendor/reasoning.js +112 -0
- package/dist/chat/vendor/reasoning.js.map +1 -0
- package/dist/chat/vendor/thread-list.aui.d.ts +37 -0
- package/dist/chat/vendor/thread-list.aui.d.ts.map +1 -0
- package/dist/chat/vendor/thread-list.aui.js +154 -0
- package/dist/chat/vendor/thread-list.aui.js.map +1 -0
- package/dist/chat/vendor/thread.aui.d.ts +47 -0
- package/dist/chat/vendor/thread.aui.d.ts.map +1 -0
- package/dist/chat/vendor/thread.aui.js +176 -0
- package/dist/chat/vendor/thread.aui.js.map +1 -0
- package/dist/chat/vendor/tool-fallback.aui.d.ts +39 -0
- package/dist/chat/vendor/tool-fallback.aui.d.ts.map +1 -0
- package/dist/chat/vendor/tool-fallback.aui.js +251 -0
- package/dist/chat/vendor/tool-fallback.aui.js.map +1 -0
- package/dist/chat/vendor/tool-group.aui.d.ts +34 -0
- package/dist/chat/vendor/tool-group.aui.d.ts.map +1 -0
- package/dist/chat/vendor/tool-group.aui.js +60 -0
- package/dist/chat/vendor/tool-group.aui.js.map +1 -0
- package/dist/chat/vendor/tooltip-icon-button.d.ts +8 -0
- package/dist/chat/vendor/tooltip-icon-button.d.ts.map +1 -0
- package/dist/chat/vendor/tooltip-icon-button.js +11 -0
- package/dist/chat/vendor/tooltip-icon-button.js.map +1 -0
- package/dist/chat/views/account.d.ts +6 -0
- package/dist/chat/views/account.d.ts.map +1 -0
- package/dist/chat/views/account.js +128 -0
- package/dist/chat/views/account.js.map +1 -0
- package/dist/chat/views/settings.d.ts +2 -0
- package/dist/chat/views/settings.d.ts.map +1 -0
- package/dist/chat/views/settings.js +104 -0
- package/dist/chat/views/settings.js.map +1 -0
- package/dist/chat/views/thread-list.d.ts +10 -0
- package/dist/chat/views/thread-list.d.ts.map +1 -0
- package/dist/chat/views/thread-list.js +21 -0
- package/dist/chat/views/thread-list.js.map +1 -0
- package/dist/chat/welcome.d.ts +10 -0
- package/dist/chat/welcome.d.ts.map +1 -0
- package/dist/chat/welcome.js +9 -0
- package/dist/chat/welcome.js.map +1 -0
- package/dist/chat-css.d.ts +1 -0
- package/dist/chat-css.js +1 -0
- package/dist/chat.css +2 -0
- package/dist/chat.isolated.css +3819 -0
- package/dist/chat.raw.css +3829 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -4
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +5 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +28 -6
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +68 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +236 -35
- package/dist/index.js.map +1 -1
- package/dist/react/T2VProvider.d.ts +2 -2
- package/dist/react/T2VProvider.d.ts.map +1 -1
- package/dist/react/T2VProvider.js +1 -1
- package/dist/react/T2VProvider.js.map +1 -1
- package/dist/react/index.d.ts +14 -14
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +7 -7
- package/dist/react/index.js.map +1 -1
- package/dist/react/usePartnerConfig.d.ts +1 -1
- package/dist/react/usePartnerConfig.d.ts.map +1 -1
- package/dist/react/usePartnerConfig.js +1 -1
- package/dist/react/usePartnerConfig.js.map +1 -1
- package/dist/react/useT2VAuth.d.ts +8 -1
- package/dist/react/useT2VAuth.d.ts.map +1 -1
- package/dist/react/useT2VAuth.js +25 -6
- package/dist/react/useT2VAuth.js.map +1 -1
- package/dist/react/useT2VChat.d.ts +3 -3
- package/dist/react/useT2VChat.d.ts.map +1 -1
- package/dist/react/useT2VChat.js +1 -1
- package/dist/react/useT2VChat.js.map +1 -1
- package/dist/react/useT2VTools.d.ts +1 -1
- package/dist/react/useT2VTools.d.ts.map +1 -1
- package/dist/react/useT2VTools.js +1 -1
- package/dist/react/useT2VTools.js.map +1 -1
- package/dist/react/useUserPreferences.d.ts +1 -1
- package/dist/react/useUserPreferences.d.ts.map +1 -1
- package/dist/react/useUserPreferences.js +1 -1
- package/dist/react/useUserPreferences.js.map +1 -1
- package/dist/sessions.d.ts +3 -3
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +6 -2
- package/dist/sessions.js.map +1 -1
- package/dist/skills.d.ts +2 -2
- package/dist/skills.d.ts.map +1 -1
- package/dist/streaming.d.ts +1 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/tools.d.ts +2 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +119 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/components/ApprovalCard.d.ts +1 -1
- package/dist/ui/components/ApprovalCard.d.ts.map +1 -1
- package/dist/ui/components/ChatHeader.js +1 -1
- package/dist/ui/components/ChatHeader.js.map +1 -1
- package/dist/ui/components/ChatPanel.d.ts +1 -1
- package/dist/ui/components/ChatPanel.d.ts.map +1 -1
- package/dist/ui/components/ChatPanel.js +14 -13
- package/dist/ui/components/ChatPanel.js.map +1 -1
- package/dist/ui/components/ChatWidget.d.ts +1 -1
- package/dist/ui/components/ChatWidget.d.ts.map +1 -1
- package/dist/ui/components/ChatWidget.js +2 -2
- package/dist/ui/components/ChatWidget.js.map +1 -1
- package/dist/ui/components/Composer.d.ts.map +1 -1
- package/dist/ui/components/Composer.js +13 -6
- package/dist/ui/components/Composer.js.map +1 -1
- package/dist/ui/components/LoginForm.d.ts.map +1 -1
- package/dist/ui/components/LoginForm.js +19 -5
- package/dist/ui/components/LoginForm.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +4 -0
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +7 -35
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageActions.js +1 -1
- package/dist/ui/components/MessageActions.js.map +1 -1
- package/dist/ui/components/MessageBubble.d.ts +1 -1
- package/dist/ui/components/MessageBubble.d.ts.map +1 -1
- package/dist/ui/components/MessageBubble.js +9 -9
- package/dist/ui/components/MessageBubble.js.map +1 -1
- package/dist/ui/components/MessageList.js +2 -2
- package/dist/ui/components/MessageList.js.map +1 -1
- package/dist/ui/components/SettingsPanel.js +4 -4
- package/dist/ui/components/SettingsPanel.js.map +1 -1
- package/dist/ui/components/Talk2View.d.ts +1 -1
- package/dist/ui/components/Talk2View.d.ts.map +1 -1
- package/dist/ui/components/Talk2View.js +16 -12
- package/dist/ui/components/Talk2View.js.map +1 -1
- package/dist/ui/components/ThinkingBlock.js +2 -2
- package/dist/ui/components/ThinkingBlock.js.map +1 -1
- package/dist/ui/components/WelcomeScreen.js +2 -2
- package/dist/ui/components/WelcomeScreen.js.map +1 -1
- package/dist/ui/context.d.ts +4 -2
- package/dist/ui/context.d.ts.map +1 -1
- package/dist/ui/context.js.map +1 -1
- package/dist/ui/index.d.ts +27 -26
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +21 -20
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/safeMarkdown.d.ts +17 -0
- package/dist/ui/safeMarkdown.d.ts.map +1 -0
- package/dist/ui/safeMarkdown.js +196 -0
- package/dist/ui/safeMarkdown.js.map +1 -0
- package/dist/ui/theme.d.ts +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/utils.d.ts +1 -1
- package/dist/ui/utils.d.ts.map +1 -1
- package/package.json +64 -5
package/dist/auth.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth module — login, signup, refresh, logout, auth state management.
|
|
3
3
|
*/
|
|
4
|
-
import type { T2VClient } from './client';
|
|
5
|
-
import type { SignupOutcome, User } from './types';
|
|
4
|
+
import type { T2VClient } from './client.js';
|
|
5
|
+
import type { SignupOutcome, User } from './types.js';
|
|
6
6
|
type AuthStateCallback = (user: User | null) => void;
|
|
7
|
+
export type PopupProvider = 'google' | 'apple';
|
|
7
8
|
export declare class T2VAuth {
|
|
8
9
|
private readonly client;
|
|
9
10
|
private listeners;
|
|
@@ -15,9 +16,27 @@ export declare class T2VAuth {
|
|
|
15
16
|
* we observe that here and flip this tab to logged-out too.
|
|
16
17
|
*/
|
|
17
18
|
private readonly onStorage;
|
|
19
|
+
/** Whether the window listeners below are currently registered. */
|
|
20
|
+
private listening;
|
|
18
21
|
constructor(client: T2VClient);
|
|
19
22
|
/**
|
|
20
|
-
*
|
|
23
|
+
* Start listening for auth being cleared, in this tab and in others.
|
|
24
|
+
*
|
|
25
|
+
* Called from the constructor, so nobody normally calls it. It is public and
|
|
26
|
+
* idempotent for one case: a caller that has already called {@link destroy}
|
|
27
|
+
* and wants the instance working again. React's StrictMode runs an effect as
|
|
28
|
+
* setup → cleanup → setup, so a component that destroys the client it owns on
|
|
29
|
+
* cleanup would otherwise be left holding a client whose auth listeners have
|
|
30
|
+
* been torn off — cross-tab sign-out and `clearAuth()` silently stop reaching
|
|
31
|
+
* it, in development only, which makes it the worst kind of bug to chase.
|
|
32
|
+
* `listen()` and {@link destroy} are exact inverses, either way round and any
|
|
33
|
+
* number of times.
|
|
34
|
+
*
|
|
35
|
+
* Guarded for SSR/Node, where `window` is absent.
|
|
36
|
+
*/
|
|
37
|
+
listen(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Remove the window event listeners {@link listen} registered.
|
|
21
40
|
* Call when disposing of this auth instance to avoid leaking listeners.
|
|
22
41
|
*/
|
|
23
42
|
destroy(): void;
|
|
@@ -41,8 +60,24 @@ export declare class T2VAuth {
|
|
|
41
60
|
*/
|
|
42
61
|
login(email: string, password: string): Promise<User>;
|
|
43
62
|
private oauthAbort?;
|
|
63
|
+
private popupProviders;
|
|
64
|
+
/**
|
|
65
|
+
* Which popup sign-ins work from this page. They work on any https:// website;
|
|
66
|
+
* on one the partner has not registered, the end-user first sees a Talk2View
|
|
67
|
+
* screen naming the site (the partner's key is public — this is what stops
|
|
68
|
+
* another site quietly using it). Partners who only allow their registered
|
|
69
|
+
* websites get an empty list elsewhere. Never rejects.
|
|
70
|
+
*/
|
|
71
|
+
getPopupProviders(): Promise<PopupProvider[]>;
|
|
44
72
|
/** Sign in with Google via a popup (engine-mediated OAuth). */
|
|
45
73
|
signInWithGoogle(): Promise<User>;
|
|
74
|
+
/**
|
|
75
|
+
* Sign in with Apple via a popup (engine-mediated OAuth). An account made
|
|
76
|
+
* with Apple in a native app has no password, so on the web this is its only
|
|
77
|
+
* way in. Needs an engine that offers Apple in the popup flow; an older one
|
|
78
|
+
* answers the popup with 404 and this rejects when the attempt expires.
|
|
79
|
+
*/
|
|
80
|
+
signInWithApple(): Promise<User>;
|
|
46
81
|
signInWithOAuth(provider: string): Promise<User>;
|
|
47
82
|
private pollOAuthExchange;
|
|
48
83
|
/** Abortable delay used by the OAuth poll loop. */
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAe7C,OAAO,KAAK,EAAgB,aAAa,EAAgC,IAAI,EAAE,MAAM,YAAY,CAAC;AAElG,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAqC/C,qBAAa,OAAO;IAwBN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBnC,OAAO,CAAC,SAAS,CAAqC;IAGtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;IAEF,mEAAmE;IACnE,OAAO,CAAC,SAAS,CAAS;gBAEG,MAAM,EAAE,SAAS;IAO9C;;;;;;;;;;;;;;OAcG;IACH,MAAM,IAAI,IAAI;IASd;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf,oDAAoD;IAC9C,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,gEAAgE;IAChE,WAAW,IAAI,OAAO;IAItB;;;;;;;OAOG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCrE;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3D,OAAO,CAAC,UAAU,CAAC,CAAkB;IAIrC,OAAO,CAAC,cAAc,CAAyC;IAE/D;;;;;;OAMG;IACH,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA4C7C,+DAA+D;IACzD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoCxC,iBAAiB;IA4D/B,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;OAEG;IACH,OAAO,IAAI,IAAI,GAAG,IAAI;IAUtB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBpF;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAO1D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;CAKxB"}
|
package/dist/auth.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth module — login, signup, refresh, logout, auth state management.
|
|
3
3
|
*/
|
|
4
|
-
import { AuthenticationError, T2VError } from './errors';
|
|
5
|
-
import { ACCESS_TOKEN_STORAGE_KEY, clearAuth, getAccessToken, getIsAnonymous, getUser, hasValidTokens, setAccessToken, setIsAnonymous, setUserApiKey, setRefreshToken, setUser, } from './storage';
|
|
4
|
+
import { AuthenticationError, T2VError } from './errors.js';
|
|
5
|
+
import { ACCESS_TOKEN_STORAGE_KEY, clearAuth, getAccessToken, getIsAnonymous, getUser, hasValidTokens, setAccessToken, setIsAnonymous, setUserApiKey, setRefreshToken, setUser, } from './storage.js';
|
|
6
6
|
// Refresh a token this many seconds before it actually expires, so a request
|
|
7
7
|
// fired right at the boundary doesn't race the expiry against clock skew.
|
|
8
8
|
const TOKEN_EXPIRY_SKEW_SECONDS = 30;
|
|
@@ -51,26 +51,49 @@ export class T2VAuth {
|
|
|
51
51
|
this.notifyListeners(null);
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
|
+
/** Whether the window listeners below are currently registered. */
|
|
55
|
+
listening = false;
|
|
54
56
|
constructor(client) {
|
|
55
57
|
this.client = client;
|
|
56
|
-
//
|
|
57
|
-
// `
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
// Listening from construction, as this class always has: a plain
|
|
59
|
+
// `new Talk2View()` must keep syncing auth across tabs without anyone
|
|
60
|
+
// having to know that listen() exists.
|
|
61
|
+
this.listen();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start listening for auth being cleared, in this tab and in others.
|
|
65
|
+
*
|
|
66
|
+
* Called from the constructor, so nobody normally calls it. It is public and
|
|
67
|
+
* idempotent for one case: a caller that has already called {@link destroy}
|
|
68
|
+
* and wants the instance working again. React's StrictMode runs an effect as
|
|
69
|
+
* setup → cleanup → setup, so a component that destroys the client it owns on
|
|
70
|
+
* cleanup would otherwise be left holding a client whose auth listeners have
|
|
71
|
+
* been torn off — cross-tab sign-out and `clearAuth()` silently stop reaching
|
|
72
|
+
* it, in development only, which makes it the worst kind of bug to chase.
|
|
73
|
+
* `listen()` and {@link destroy} are exact inverses, either way round and any
|
|
74
|
+
* number of times.
|
|
75
|
+
*
|
|
76
|
+
* Guarded for SSR/Node, where `window` is absent.
|
|
77
|
+
*/
|
|
78
|
+
listen() {
|
|
79
|
+
if (this.listening || typeof window === 'undefined')
|
|
80
|
+
return;
|
|
81
|
+
// Same-tab custom event (e.g., from 401 handling via clearAuth()).
|
|
82
|
+
window.addEventListener('talk2view_auth_cleared', this.onAuthCleared);
|
|
83
|
+
// Cross-tab native storage event (a logout in a sibling tab).
|
|
84
|
+
window.addEventListener('storage', this.onStorage);
|
|
85
|
+
this.listening = true;
|
|
64
86
|
}
|
|
65
87
|
/**
|
|
66
|
-
* Remove the window event listeners
|
|
88
|
+
* Remove the window event listeners {@link listen} registered.
|
|
67
89
|
* Call when disposing of this auth instance to avoid leaking listeners.
|
|
68
90
|
*/
|
|
69
91
|
destroy() {
|
|
70
|
-
if (typeof window
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
if (!this.listening || typeof window === 'undefined')
|
|
93
|
+
return;
|
|
94
|
+
window.removeEventListener('talk2view_auth_cleared', this.onAuthCleared);
|
|
95
|
+
window.removeEventListener('storage', this.onStorage);
|
|
96
|
+
this.listening = false;
|
|
74
97
|
}
|
|
75
98
|
/** Start an anonymous demo session (no account). */
|
|
76
99
|
async startAnonymous(opts) {
|
|
@@ -139,10 +162,65 @@ export class T2VAuth {
|
|
|
139
162
|
// previous one so its loop can't linger as a "zombie" and reject a later
|
|
140
163
|
// attempt with a stale "expired"/"window closed" error.
|
|
141
164
|
oauthAbort;
|
|
165
|
+
// Cached across calls so mounting several forms on one page only asks the
|
|
166
|
+
// engine once. Never reset — the answer for this page load doesn't change.
|
|
167
|
+
popupProviders = null;
|
|
168
|
+
/**
|
|
169
|
+
* Which popup sign-ins work from this page. They work on any https:// website;
|
|
170
|
+
* on one the partner has not registered, the end-user first sees a Talk2View
|
|
171
|
+
* screen naming the site (the partner's key is public — this is what stops
|
|
172
|
+
* another site quietly using it). Partners who only allow their registered
|
|
173
|
+
* websites get an empty list elsewhere. Never rejects.
|
|
174
|
+
*/
|
|
175
|
+
getPopupProviders() {
|
|
176
|
+
this.popupProviders ??= this.client
|
|
177
|
+
.request('/v1/auth/oauth/providers', {}, false)
|
|
178
|
+
.then((res) => {
|
|
179
|
+
if (typeof window !== 'undefined') {
|
|
180
|
+
const here = window.location.origin;
|
|
181
|
+
const where = 'Settings → Allowed websites in the Talk2View dashboard';
|
|
182
|
+
if (res.providers.length === 0 && res.reason === 'referrer_blocked') {
|
|
183
|
+
console.info(`[Talk2View] Google and Apple sign-in are hidden on ${here}: this page sends no Referer ` +
|
|
184
|
+
'header, and the engine uses it to confirm which website opened the sign-in window. ' +
|
|
185
|
+
'Set `Referrer-Policy: strict-origin-when-cross-origin` (the browser default) on the ' +
|
|
186
|
+
'page that hosts the chat. Email and password sign-in is unaffected.');
|
|
187
|
+
}
|
|
188
|
+
else if (res.providers.length === 0 && res.reason === 'origin_not_registered') {
|
|
189
|
+
console.info(`[Talk2View] Google and Apple sign-in are hidden on ${here}. Popup sign-in needs an ` +
|
|
190
|
+
`https:// website (never localhost), and this partner only allows the websites it has ` +
|
|
191
|
+
`registered — add this one under ${where}. Email and password sign-in is unaffected.`);
|
|
192
|
+
}
|
|
193
|
+
else if (res.providers.length > 0 && res.listed === false) {
|
|
194
|
+
console.info(`[Talk2View] Google and Apple sign-in work on ${here}, but your users first see a ` +
|
|
195
|
+
`Talk2View screen asking them to confirm this website. Add it under ${where} to remove that screen.`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return res.providers;
|
|
199
|
+
})
|
|
200
|
+
.catch((err) => {
|
|
201
|
+
// An engine that predates this endpoint offered Google unconditionally.
|
|
202
|
+
if (err instanceof T2VError && err.statusCode === 404)
|
|
203
|
+
return ['google'];
|
|
204
|
+
// Anything else (offline, a 5xx) says nothing about this website: offer
|
|
205
|
+
// nothing now, but let the next form that mounts ask again.
|
|
206
|
+
this.popupProviders = null;
|
|
207
|
+
return [];
|
|
208
|
+
});
|
|
209
|
+
return this.popupProviders;
|
|
210
|
+
}
|
|
142
211
|
/** Sign in with Google via a popup (engine-mediated OAuth). */
|
|
143
212
|
async signInWithGoogle() {
|
|
144
213
|
return this.signInWithOAuth('google');
|
|
145
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Sign in with Apple via a popup (engine-mediated OAuth). An account made
|
|
217
|
+
* with Apple in a native app has no password, so on the web this is its only
|
|
218
|
+
* way in. Needs an engine that offers Apple in the popup flow; an older one
|
|
219
|
+
* answers the popup with 404 and this rejects when the attempt expires.
|
|
220
|
+
*/
|
|
221
|
+
async signInWithApple() {
|
|
222
|
+
return this.signInWithOAuth('apple');
|
|
223
|
+
}
|
|
146
224
|
async signInWithOAuth(provider) {
|
|
147
225
|
if (typeof window === 'undefined') {
|
|
148
226
|
throw new T2VError('OAuth sign-in requires a browser environment');
|
|
@@ -196,9 +274,16 @@ export class T2VAuth {
|
|
|
196
274
|
// we poll until ready, the txn expires (→ 410 after it was seen), or the
|
|
197
275
|
// 180s deadline (which matches the server-side txn TTL).
|
|
198
276
|
let sawTxn = false;
|
|
277
|
+
// A sign-in that never starts — the popup was refused, or closed on the
|
|
278
|
+
// engine's check screen — never gets a transaction, so every poll is a 410.
|
|
279
|
+
// Long enough to read the check screen; far short of the full deadline.
|
|
280
|
+
const neverStartedMs = Date.now() + 90_000;
|
|
199
281
|
while (Date.now() < deadlineMs) {
|
|
200
282
|
if (signal.aborted)
|
|
201
283
|
throw new AuthenticationError('Sign-in was cancelled.');
|
|
284
|
+
if (!sawTxn && Date.now() > neverStartedMs) {
|
|
285
|
+
throw new AuthenticationError('Sign-in didn’t start. Close the sign-in window and try again.');
|
|
286
|
+
}
|
|
202
287
|
let ready = null;
|
|
203
288
|
let missing = false;
|
|
204
289
|
try {
|
|
@@ -228,7 +313,7 @@ export class T2VAuth {
|
|
|
228
313
|
if (!missing)
|
|
229
314
|
delay = Math.min(delay * 1.5, 4000);
|
|
230
315
|
}
|
|
231
|
-
throw new AuthenticationError('
|
|
316
|
+
throw new AuthenticationError('Sign-in timed out. Please try again.');
|
|
232
317
|
}
|
|
233
318
|
/** Abortable delay used by the OAuth poll loop. */
|
|
234
319
|
sleep(ms, signal) {
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Talk2View } from '../index.js';
|
|
2
|
+
import type { User } from '../types.js';
|
|
3
|
+
/** Why the Account view opened by itself, if it did. */
|
|
4
|
+
export type AccountReason = 'guest-limit' | 'demo-limit' | null;
|
|
5
|
+
export declare const REASON_COPY: Record<Exclude<AccountReason, null>, string>;
|
|
6
|
+
export type AccountState = {
|
|
7
|
+
status: 'none' | 'guest' | 'signed-in';
|
|
8
|
+
user: User | null;
|
|
9
|
+
};
|
|
10
|
+
/** Who is using the chat. Re-renders on sign-in, sign-out and guest start. */
|
|
11
|
+
export declare function useAccount(client: Talk2View): AccountState;
|
|
12
|
+
/** Whether a guest has been turned away, and which way. */
|
|
13
|
+
export interface GuestLimits {
|
|
14
|
+
/** This guest has used their allowance. */
|
|
15
|
+
demoLimitReached: boolean;
|
|
16
|
+
/** The engine will not start a guest session at all. */
|
|
17
|
+
anonymousUnavailable: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Track the two ways a guest is turned away, for as long as the chat is on the
|
|
21
|
+
* page.
|
|
22
|
+
*
|
|
23
|
+
* It belongs to the provider, not to the view that reacts to it: the launcher's
|
|
24
|
+
* panel is unmounted until someone opens it, and the refusal usually arrives
|
|
25
|
+
* while it still is — the chat starts its guest session as soon as it mounts.
|
|
26
|
+
* State kept inside the panel would miss the event that is the reason to open
|
|
27
|
+
* the panel at all, and the visitor would land on a thread they cannot use.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useGuestLimits(client: Talk2View): GuestLimits;
|
|
30
|
+
export interface AuthGate {
|
|
31
|
+
/** Sign-in replaces the thread: the visitor cannot chat until they are in. */
|
|
32
|
+
gated: boolean;
|
|
33
|
+
/** What opened it by itself, for the banner. Null when the visitor did. */
|
|
34
|
+
reason: AccountReason;
|
|
35
|
+
account: AccountState;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The gate, computed exactly as `ChatPanel` in the SDK's `/ui` panel computes
|
|
39
|
+
* it, so the two chats agree about who may speak to the agent.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useAuthGate(client: Talk2View, allowAnonymous: boolean, limits: GuestLimits): AuthGate;
|
|
42
|
+
//# sourceMappingURL=auth-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-gate.d.ts","sourceRoot":"","sources":["../../src/chat/auth-gate.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC;AAEhE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAGpE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAUzF,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAkB1D;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAID;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CA4B7D;AAED,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,OAAO,EACvB,MAAM,EAAE,WAAW,GAClB,QAAQ,CAYV"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Who is using the chat, and whether they have to sign in before they can.
|
|
4
|
+
*
|
|
5
|
+
* The rule is the one the SDK's own `/ui` panel has shipped with: a logged-out
|
|
6
|
+
* visitor is stopped when the integrator does not allow guests, or when the
|
|
7
|
+
* engine refuses to start a guest session; a guest is stopped once their
|
|
8
|
+
* allowance runs out. Everything else — a signed-in end-user, a guest with
|
|
9
|
+
* allowance left — goes straight to the thread.
|
|
10
|
+
*/
|
|
11
|
+
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
12
|
+
export const REASON_COPY = {
|
|
13
|
+
'guest-limit': 'Guest chat isn’t available right now. Sign in to keep going.',
|
|
14
|
+
'demo-limit': 'You’ve reached the guest limit. Sign in or create a free account to keep going.',
|
|
15
|
+
};
|
|
16
|
+
const NONE = { status: 'none', user: null };
|
|
17
|
+
function readAccount(client) {
|
|
18
|
+
const user = client.auth.getUser();
|
|
19
|
+
if (!user)
|
|
20
|
+
return NONE;
|
|
21
|
+
return { status: client.auth.isAnonymous() ? 'guest' : 'signed-in', user };
|
|
22
|
+
}
|
|
23
|
+
/** Who is using the chat. Re-renders on sign-in, sign-out and guest start. */
|
|
24
|
+
export function useAccount(client) {
|
|
25
|
+
// getSnapshot must return a stable value between changes, so the state is
|
|
26
|
+
// cached here and replaced only when the auth layer says something changed.
|
|
27
|
+
const [store] = useState(() => {
|
|
28
|
+
let current = NONE;
|
|
29
|
+
return {
|
|
30
|
+
subscribe: (notify) => {
|
|
31
|
+
current = readAccount(client);
|
|
32
|
+
notify();
|
|
33
|
+
return client.auth.onAuthStateChange(() => {
|
|
34
|
+
current = readAccount(client);
|
|
35
|
+
notify();
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
get: () => current,
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
return useSyncExternalStore(store.subscribe, store.get, () => NONE);
|
|
42
|
+
}
|
|
43
|
+
const NO_LIMITS = { demoLimitReached: false, anonymousUnavailable: false };
|
|
44
|
+
/**
|
|
45
|
+
* Track the two ways a guest is turned away, for as long as the chat is on the
|
|
46
|
+
* page.
|
|
47
|
+
*
|
|
48
|
+
* It belongs to the provider, not to the view that reacts to it: the launcher's
|
|
49
|
+
* panel is unmounted until someone opens it, and the refusal usually arrives
|
|
50
|
+
* while it still is — the chat starts its guest session as soon as it mounts.
|
|
51
|
+
* State kept inside the panel would miss the event that is the reason to open
|
|
52
|
+
* the panel at all, and the visitor would land on a thread they cannot use.
|
|
53
|
+
*/
|
|
54
|
+
export function useGuestLimits(client) {
|
|
55
|
+
const account = useAccount(client);
|
|
56
|
+
const [limits, setLimits] = useState(NO_LIMITS);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const offs = [
|
|
59
|
+
client.on('demoLimitReached', () => setLimits((l) => (l.demoLimitReached ? l : { ...l, demoLimitReached: true }))),
|
|
60
|
+
client.on('anonymousUnavailable', () => setLimits((l) => (l.anonymousUnavailable ? l : { ...l, anonymousUnavailable: true }))),
|
|
61
|
+
];
|
|
62
|
+
return () => offs.forEach((off) => off());
|
|
63
|
+
}, [client]);
|
|
64
|
+
// Signing in to a real account lifts the limit AND resumes what it interrupted:
|
|
65
|
+
// the core has already dropped the orphaned guest session, so the resend lands
|
|
66
|
+
// in a fresh one owned by the now-signed-in end-user.
|
|
67
|
+
const signedIn = account.status === 'signed-in';
|
|
68
|
+
const limited = limits.demoLimitReached || limits.anonymousUnavailable;
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (!signedIn || !limited)
|
|
71
|
+
return;
|
|
72
|
+
setLimits(NO_LIMITS);
|
|
73
|
+
void client.retryLastMessage();
|
|
74
|
+
}, [client, signedIn, limited]);
|
|
75
|
+
return limits;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The gate, computed exactly as `ChatPanel` in the SDK's `/ui` panel computes
|
|
79
|
+
* it, so the two chats agree about who may speak to the agent.
|
|
80
|
+
*/
|
|
81
|
+
export function useAuthGate(client, allowAnonymous, limits) {
|
|
82
|
+
const account = useAccount(client);
|
|
83
|
+
const { demoLimitReached, anonymousUnavailable } = limits;
|
|
84
|
+
// A guest counts as authenticated here, as they do in `/ui`: they have a
|
|
85
|
+
// session and may chat. `allowAnonymous` is what decides whether they get one.
|
|
86
|
+
const isAuthenticated = account.status !== 'none';
|
|
87
|
+
return {
|
|
88
|
+
gated: (!isAuthenticated && (!allowAnonymous || anonymousUnavailable)) || demoLimitReached,
|
|
89
|
+
reason: demoLimitReached ? 'demo-limit' : anonymousUnavailable ? 'guest-limit' : null,
|
|
90
|
+
account,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=auth-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-gate.js","sourceRoot":"","sources":["../../src/chat/auth-gate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Talk2ViewChat>` — the packaged chat, filling whatever box you put it in: a
|
|
3
|
+
* Word task pane, a partner's side panel, a page section.
|
|
4
|
+
*
|
|
5
|
+
* ```tsx
|
|
6
|
+
* import { Talk2ViewChat } from '@talk2view/sdk/chat';
|
|
7
|
+
* import '@talk2view/sdk/chat.css';
|
|
8
|
+
*
|
|
9
|
+
* <Talk2ViewChat partnerKey="pk_live_…" welcome={{ suggestions: ['What can you do?'] }} />
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* The frame is ported from the website's assistant modal, minus the popover:
|
|
13
|
+
* a header of one-tap views over a thread that never unmounts, so switching to
|
|
14
|
+
* Settings and back keeps the conversation, the scroll position and any
|
|
15
|
+
* half-typed message.
|
|
16
|
+
*/
|
|
17
|
+
import { type FC, type ReactNode } from 'react';
|
|
18
|
+
import { type Talk2ViewChatProps } from './provider.js';
|
|
19
|
+
/** Which pane the header is showing. */
|
|
20
|
+
export type ChatView = 'thread' | 'list' | 'settings' | 'account';
|
|
21
|
+
export declare function Talk2ViewChat(props: Talk2ViewChatProps): ReactNode;
|
|
22
|
+
export interface ChatShellProps {
|
|
23
|
+
/** A short line under the composer, e.g. terms. */
|
|
24
|
+
footer?: ReactNode;
|
|
25
|
+
/** Extra header buttons at the end of the row — the launcher's Close (Task 6). */
|
|
26
|
+
headerEnd?: ReactNode;
|
|
27
|
+
/** Drive the view from outside, e.g. the launcher opening on a notification. */
|
|
28
|
+
view?: ChatView;
|
|
29
|
+
onViewChange?: (view: ChatView) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The frame without the outer `.t2v-chat` box, so the launcher (Task 6) can
|
|
33
|
+
* render the same thing inside its popover.
|
|
34
|
+
*/
|
|
35
|
+
export declare const ChatShell: FC<ChatShellProps>;
|
|
36
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/chat/chat.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAML,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAStF,wCAAwC;AACxC,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AASlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAalE;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gFAAgF;IAChF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACzC;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAsFxC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `<Talk2ViewChat>` — the packaged chat, filling whatever box you put it in: a
|
|
5
|
+
* Word task pane, a partner's side panel, a page section.
|
|
6
|
+
*
|
|
7
|
+
* ```tsx
|
|
8
|
+
* import { Talk2ViewChat } from '@talk2view/sdk/chat';
|
|
9
|
+
* import '@talk2view/sdk/chat.css';
|
|
10
|
+
*
|
|
11
|
+
* <Talk2ViewChat partnerKey="pk_live_…" welcome={{ suggestions: ['What can you do?'] }} />
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The frame is ported from the website's assistant modal, minus the popover:
|
|
15
|
+
* a header of one-tap views over a thread that never unmounts, so switching to
|
|
16
|
+
* Settings and back keeps the conversation, the scroll position and any
|
|
17
|
+
* half-typed message.
|
|
18
|
+
*/
|
|
19
|
+
import { useEffect, useMemo, useRef, useState, } from 'react';
|
|
20
|
+
import { HistoryIcon, PlusIcon, SettingsIcon, UserRoundIcon } from 'lucide-react';
|
|
21
|
+
import { ThreadListPrimitive, useAuiState } from '@assistant-ui/react';
|
|
22
|
+
import { Thread, ComposerExtrasContext } from './vendor/thread.aui.js';
|
|
23
|
+
import { TooltipIconButton } from './vendor/tooltip-icon-button.js';
|
|
24
|
+
import { cn } from './lib/cn.js';
|
|
25
|
+
import { ChatProvider, useChatContext } from './provider.js';
|
|
26
|
+
import { Welcome } from './welcome.js';
|
|
27
|
+
import { ComposerDictation } from './composer-extras.js';
|
|
28
|
+
import { ToolFallback, ToolGroup } from './tool-fallback.js';
|
|
29
|
+
import { useAuthGate } from './auth-gate.js';
|
|
30
|
+
import { AccountView } from './views/account.js';
|
|
31
|
+
import { SettingsView } from './views/settings.js';
|
|
32
|
+
import { ThreadListView } from './views/thread-list.js';
|
|
33
|
+
const VIEW_TITLES = {
|
|
34
|
+
thread: 'New Chat',
|
|
35
|
+
list: 'Threads',
|
|
36
|
+
settings: 'Settings',
|
|
37
|
+
account: 'Account',
|
|
38
|
+
};
|
|
39
|
+
export function Talk2ViewChat(props) {
|
|
40
|
+
const { className, fontFamily, footer } = props;
|
|
41
|
+
return (_jsx("div", { className: cn('t2v-chat', className),
|
|
42
|
+
// The host page's font unless the integrator names one; nothing is fetched.
|
|
43
|
+
style: fontFamily ? { ['--t2v-font']: fontFamily } : undefined, children: _jsx(ChatProvider, { ...props, children: _jsx(ChatShell, { footer: footer }) }) }));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The frame without the outer `.t2v-chat` box, so the launcher (Task 6) can
|
|
47
|
+
* render the same thing inside its popover.
|
|
48
|
+
*/
|
|
49
|
+
export const ChatShell = ({ footer, headerEnd, view: given, onViewChange }) => {
|
|
50
|
+
const { client, features, behaviour, limits } = useChatContext();
|
|
51
|
+
const [own, setOwn] = useState('thread');
|
|
52
|
+
const gate = useAuthGate(client, behaviour.current.allowAnonymous, limits);
|
|
53
|
+
const chosen = given ?? own;
|
|
54
|
+
// Behind the gate the thread is not somewhere to go back to: Settings and the
|
|
55
|
+
// thread list stay reachable, but "back" lands on sign-in until there is an
|
|
56
|
+
// account behind it.
|
|
57
|
+
const view = gate.gated && chosen === 'thread' ? 'account' : chosen;
|
|
58
|
+
const setView = (next) => {
|
|
59
|
+
setOwn(next);
|
|
60
|
+
onViewChange?.(next);
|
|
61
|
+
};
|
|
62
|
+
// An approval stops the agent until somebody answers it, and the thread is
|
|
63
|
+
// `inert` whenever another view is open — so a card arriving while the
|
|
64
|
+
// end-user is in Settings or the thread list is on screen and unclickable,
|
|
65
|
+
// with nothing saying why. Bring the thread back.
|
|
66
|
+
//
|
|
67
|
+
// Account is the exception: it holds a half-typed sign-in, and throwing that
|
|
68
|
+
// away is a worse trade than a decision that waits a moment longer.
|
|
69
|
+
const latest = useRef({ view, setView });
|
|
70
|
+
latest.current = { view, setView };
|
|
71
|
+
useEffect(() => client.on('approvalChange', (approval) => {
|
|
72
|
+
const now = latest.current;
|
|
73
|
+
if (approval && now.view !== 'thread' && now.view !== 'account')
|
|
74
|
+
now.setView('thread');
|
|
75
|
+
}), [client]);
|
|
76
|
+
const components = useMemo(() => ({ Welcome, ToolFallback, ToolGroup }), []);
|
|
77
|
+
// The voice button replaces upstream's mic; the attach button goes when files
|
|
78
|
+
// are off, because upstream renders it whether or not the runtime takes one.
|
|
79
|
+
const extras = useMemo(() => ({ dictate: _jsx(ComposerDictation, {}), attachments: features.attachments }), [features.attachments]);
|
|
80
|
+
// Mounted once: switching views must not throw away the conversation, the
|
|
81
|
+
// scroll position or a half-typed message.
|
|
82
|
+
const thread = useMemo(() => (_jsx(ComposerExtrasContext.Provider, { value: extras, children: _jsx(Thread, { components: components }) })), [components, extras]);
|
|
83
|
+
return (_jsxs("div", { className: "t2v-chat-shell aui-root bg-popover text-popover-foreground flex h-full min-h-0 flex-col overflow-clip text-base antialiased", children: [_jsx(ChatHeader, { view: view, onViewChange: setView, end: headerEnd, signedIn: gate.account.status === 'signed-in' }), _jsxs("div", { className: "t2v-chat-body aui-modal-body relative min-h-0 flex-1", children: [_jsx("div", {
|
|
84
|
+
// An inline ref runs again on every render, which is what keeps this in
|
|
85
|
+
// step with the view. Inert, not unmounted: see `thread` above.
|
|
86
|
+
ref: (node) => {
|
|
87
|
+
if (node)
|
|
88
|
+
node.inert = view !== 'thread';
|
|
89
|
+
}, className: "aui-modal-thread h-full", children: thread }), view === 'list' && features.threadList && (_jsx(ThreadListView, { onSelect: () => setView('thread') })), view === 'settings' && features.settings && _jsx(SettingsView, {}), view === 'account' && (_jsx(AccountView, { reason: gate.reason, onSignedIn: () => setView('thread') }))] }), footer ? (_jsx("div", { className: "t2v-chat-footer text-muted-foreground border-foreground/10 shrink-0 border-t px-3.5 py-2 text-xs", children: footer })) : null] }));
|
|
90
|
+
};
|
|
91
|
+
const ChatHeader = ({ view, onViewChange, end, signedIn }) => {
|
|
92
|
+
const { features } = useChatContext();
|
|
93
|
+
const title = useAuiState((s) => s.threadListItem.title);
|
|
94
|
+
const hasThreads = useAuiState((s) => s.threads.threadIds.length > 0);
|
|
95
|
+
const titleRef = useRef(null);
|
|
96
|
+
const shownViewRef = useRef(view);
|
|
97
|
+
// Switching view moves the content under an unmoved focus ring; send focus to
|
|
98
|
+
// the heading so a screen reader announces what is now on screen — but only
|
|
99
|
+
// when focus was nowhere in particular, never stealing it from a control.
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
if (shownViewRef.current === view)
|
|
102
|
+
return;
|
|
103
|
+
shownViewRef.current = view;
|
|
104
|
+
const heading = titleRef.current;
|
|
105
|
+
const active = document.activeElement;
|
|
106
|
+
if (active === document.body || active === heading?.closest("[role='dialog']")) {
|
|
107
|
+
heading?.focus();
|
|
108
|
+
}
|
|
109
|
+
}, [view]);
|
|
110
|
+
// A one-tap toggle: the button that opened a view closes it again.
|
|
111
|
+
const toggle = (target) => () => onViewChange(view === target ? 'thread' : target);
|
|
112
|
+
return (_jsxs("div", { className: "t2v-chat-header aui-modal-header border-foreground/10 flex h-11 shrink-0 items-center gap-2 border-b ps-3.5 pe-2", children: [_jsx("h2", { ref: titleRef, tabIndex: -1, className: "aui-modal-title min-w-0 flex-1 truncate text-[13px] font-medium outline-none", children: view === 'thread' ? title || VIEW_TITLES.thread : VIEW_TITLES[view] }), _jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [features.account && (_jsxs(TooltipIconButton
|
|
113
|
+
// "Account" in both states. An icon-only button's name should say
|
|
114
|
+
// where it goes, and "Sign in" here collided with the account form's
|
|
115
|
+
// own submit button — two controls, one name, two different actions.
|
|
116
|
+
, {
|
|
117
|
+
// "Account" in both states. An icon-only button's name should say
|
|
118
|
+
// where it goes, and "Sign in" here collided with the account form's
|
|
119
|
+
// own submit button — two controls, one name, two different actions.
|
|
120
|
+
tooltip: "Account", side: "bottom", "aria-pressed": view === 'account', className: cn(HEADER_BUTTON, 'relative'), onClick: toggle('account'), children: [_jsx(UserRoundIcon, { className: "size-3.5" }), signedIn ? (_jsx("span", { "aria-hidden": "true", className: "bg-primary absolute end-1 top-1 size-1.5 rounded-full max-sm:end-2 max-sm:top-2" })) : null] })), features.settings && (_jsx(TooltipIconButton, { tooltip: "Settings", side: "bottom", "aria-pressed": view === 'settings', className: HEADER_BUTTON, onClick: toggle('settings'), children: _jsx(SettingsIcon, { className: "size-3.5" }) })), features.threadList && (_jsx(TooltipIconButton, { tooltip: "Threads", side: "bottom", "aria-pressed": view === 'list', disabled: !hasThreads && view === 'thread', className: HEADER_BUTTON, onClick: toggle('list'), children: _jsx(HistoryIcon, { className: "size-3.5" }) })), _jsx(ThreadListPrimitive.New, { render: _jsx(TooltipIconButton, { tooltip: "New Thread", side: "bottom", className: HEADER_BUTTON, onClick: () => onViewChange('thread') }), children: _jsx(PlusIcon, { className: "size-3.5" }) }), end] })] }));
|
|
121
|
+
};
|
|
122
|
+
/* 28px on a mouse, 36px under a finger — the touch target, not the icon. */
|
|
123
|
+
const HEADER_BUTTON = 'text-muted-foreground hover:text-foreground aria-pressed:bg-muted aria-pressed:text-foreground size-7 max-sm:size-9 rounded-md p-0';
|
|
124
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/chat/chat.tsx"],"names":[],"mappings":"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"}
|