@wix/legends-platform-sdk 1.35.0 → 1.36.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 +18 -1
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js +10 -7
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
- package/dist/cjs/components/LegendsPlatformCore/LegendsPlatformCore.js +73 -0
- package/dist/cjs/components/LegendsPlatformCore/LegendsPlatformCore.js.map +1 -0
- package/dist/cjs/components/LegendsPlatformCore/index.js +10 -0
- package/dist/cjs/components/LegendsPlatformCore/index.js.map +1 -0
- package/dist/cjs/sdk.js +7 -1
- package/dist/cjs/sdk.js.map +1 -1
- package/dist/cjs/services/BearerPersonaChatService.js +187 -0
- package/dist/cjs/services/BearerPersonaChatService.js.map +1 -0
- package/dist/cjs/services/FetchPersonaChatService.js +10 -4
- package/dist/cjs/services/FetchPersonaChatService.js.map +1 -1
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js +5 -2
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
- package/dist/esm/components/LegendsPlatformCore/LegendsPlatformCore.js +40 -0
- package/dist/esm/components/LegendsPlatformCore/LegendsPlatformCore.js.map +1 -0
- package/dist/esm/components/LegendsPlatformCore/index.js +2 -0
- package/dist/esm/components/LegendsPlatformCore/index.js.map +1 -0
- package/dist/esm/sdk.js +2 -0
- package/dist/esm/sdk.js.map +1 -1
- package/dist/esm/services/BearerPersonaChatService.js +177 -0
- package/dist/esm/services/BearerPersonaChatService.js.map +1 -0
- package/dist/esm/services/FetchPersonaChatService.js +12 -3
- package/dist/esm/services/FetchPersonaChatService.js.map +1 -1
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts +3 -0
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts.map +1 -1
- package/dist/types/components/LegendsPlatformCore/LegendsPlatformCore.d.ts +23 -0
- package/dist/types/components/LegendsPlatformCore/LegendsPlatformCore.d.ts.map +1 -0
- package/dist/types/components/LegendsPlatformCore/index.d.ts +2 -0
- package/dist/types/components/LegendsPlatformCore/index.d.ts.map +1 -0
- package/dist/types/sdk.d.ts +4 -0
- package/dist/types/sdk.d.ts.map +1 -1
- package/dist/types/services/BearerPersonaChatService.d.ts +37 -0
- package/dist/types/services/BearerPersonaChatService.d.ts.map +1 -0
- package/dist/types/services/FetchPersonaChatService.d.ts +11 -1
- package/dist/types/services/FetchPersonaChatService.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -80,7 +80,8 @@ The root context provider. Must wrap all SDK hooks and components.
|
|
|
80
80
|
|------|------|-------------|
|
|
81
81
|
| `chatId` | `string` | Required. The chat instance ID |
|
|
82
82
|
| `namespace` | `string` | Required. Your namespace |
|
|
83
|
-
| `apiKey` | `string` | Raw namespace API key — pass `lp_...` as-is, the SDK sends it as `Authorization: Api-Key <token
|
|
83
|
+
| `apiKey` | `string` | Raw namespace API key — pass `lp_...` as-is, the SDK sends it as `Authorization: Api-Key <token>`. **Server-side or trusted apps only: never put a namespace API key in a web page** |
|
|
84
|
+
| `baseUrl` | `string` | API host for the `apiKey` service. Defaults to `https://www.wixapis.com` |
|
|
84
85
|
| `personaChatService` | `IPersonaChatService` | Custom service for advanced use cases (see below) |
|
|
85
86
|
| `tools` | `ToolsRegistry` | Optional client-side tool handlers |
|
|
86
87
|
| `queryClient` | `QueryClient` | Optional TanStack Query client |
|
|
@@ -88,6 +89,22 @@ The root context provider. Must wrap all SDK hooks and components.
|
|
|
88
89
|
|
|
89
90
|
Either `apiKey` or `personaChatService` must be provided.
|
|
90
91
|
|
|
92
|
+
#### In a web page: a bearer token, never an API key
|
|
93
|
+
|
|
94
|
+
A page authenticates with the visitor's own access token (for example a visitor token minted by the Legend's sign-in app), through `BearerPersonaChatService`:
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import { BearerPersonaChatService, LegendsPlatformCore } from '@wix/legends-platform-sdk';
|
|
98
|
+
|
|
99
|
+
const service = new BearerPersonaChatService({
|
|
100
|
+
baseUrl: 'https://www.wixapis.com', // optional
|
|
101
|
+
getAccessToken: () => tokens.accessToken, // called for every request
|
|
102
|
+
onUnauthorized: () => tokens.refresh(), // optional: resolve true to retry once after a 401
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`LegendsPlatformCore` (main entry) provides the text-chat hooks without loading LiveKit. When a call starts, wrap it in `LegendsPlatform` from `@wix/legends-platform-sdk/livekit/sdk` and pass the same `store` and `queryClient` to keep the chat state.
|
|
107
|
+
|
|
91
108
|
---
|
|
92
109
|
|
|
93
110
|
### Hooks
|
|
@@ -21,6 +21,7 @@ function LegendsPlatform(props) {
|
|
|
21
21
|
className,
|
|
22
22
|
tools = {},
|
|
23
23
|
apiKey,
|
|
24
|
+
baseUrl,
|
|
24
25
|
personaChatService
|
|
25
26
|
} = props;
|
|
26
27
|
const store = (0, _react.useMemo)(() => props.store || (0, _jotai.createStore)(), [props.store]);
|
|
@@ -37,10 +38,12 @@ function LegendsPlatform(props) {
|
|
|
37
38
|
return personaChatService;
|
|
38
39
|
}
|
|
39
40
|
if (apiKey) {
|
|
40
|
-
return new _FetchPersonaChatService.FetchPersonaChatService(apiKey
|
|
41
|
+
return new _FetchPersonaChatService.FetchPersonaChatService(apiKey, {
|
|
42
|
+
baseUrl
|
|
43
|
+
});
|
|
41
44
|
}
|
|
42
45
|
return undefined;
|
|
43
|
-
}, [personaChatService, apiKey]);
|
|
46
|
+
}, [personaChatService, apiKey, baseUrl]);
|
|
44
47
|
const telemetryRef = (0, _react.useRef)(props.startupTelemetry);
|
|
45
48
|
telemetryRef.current = props.startupTelemetry;
|
|
46
49
|
const telemetryEnabled = (_props$startupTelemet = props.startupTelemetry) == null ? void 0 : _props$startupTelemet.enabled;
|
|
@@ -75,7 +78,7 @@ function LegendsPlatform(props) {
|
|
|
75
78
|
__self: this,
|
|
76
79
|
__source: {
|
|
77
80
|
fileName: _jsxFileName,
|
|
78
|
-
lineNumber:
|
|
81
|
+
lineNumber: 105,
|
|
79
82
|
columnNumber: 5
|
|
80
83
|
}
|
|
81
84
|
}, /*#__PURE__*/_react.default.createElement(_reactQuery.QueryClientProvider, {
|
|
@@ -83,7 +86,7 @@ function LegendsPlatform(props) {
|
|
|
83
86
|
__self: this,
|
|
84
87
|
__source: {
|
|
85
88
|
fileName: _jsxFileName,
|
|
86
|
-
lineNumber:
|
|
89
|
+
lineNumber: 106,
|
|
87
90
|
columnNumber: 7
|
|
88
91
|
}
|
|
89
92
|
}, /*#__PURE__*/_react.default.createElement(_jotai.Provider, {
|
|
@@ -91,14 +94,14 @@ function LegendsPlatform(props) {
|
|
|
91
94
|
__self: this,
|
|
92
95
|
__source: {
|
|
93
96
|
fileName: _jsxFileName,
|
|
94
|
-
lineNumber:
|
|
97
|
+
lineNumber: 107,
|
|
95
98
|
columnNumber: 9
|
|
96
99
|
}
|
|
97
100
|
}, /*#__PURE__*/_react.default.createElement(_reactBus.Provider, {
|
|
98
101
|
__self: this,
|
|
99
102
|
__source: {
|
|
100
103
|
fileName: _jsxFileName,
|
|
101
|
-
lineNumber:
|
|
104
|
+
lineNumber: 108,
|
|
102
105
|
columnNumber: 11
|
|
103
106
|
}
|
|
104
107
|
}, /*#__PURE__*/_react.default.createElement(_componentsReact.LiveKitRoom, {
|
|
@@ -108,7 +111,7 @@ function LegendsPlatform(props) {
|
|
|
108
111
|
__self: this,
|
|
109
112
|
__source: {
|
|
110
113
|
fileName: _jsxFileName,
|
|
111
|
-
lineNumber:
|
|
114
|
+
lineNumber: 109,
|
|
112
115
|
columnNumber: 13
|
|
113
116
|
}
|
|
114
117
|
}, children)))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_jotai","_componentsReact","_reactQuery","_reactBus","_FetchPersonaChatService","_sdkConsumer","_attempt","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LegendsPlatform","props","_props$startupTelemet","_props$startupTelemet2","_props$startupTelemet3","chatId","namespace","children","className","tools","apiKey","personaChatService","store","useMemo","createStore","queryClient","QueryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","resolvedService","FetchPersonaChatService","undefined","telemetryRef","useRef","startupTelemetry","current","telemetryEnabled","enabled","intentId","intent","id","attemptId","attempt","startupTelemetrySession","config","StartupTelemetrySession","report","event","_telemetryRef$current","consumer","createElement","SdkConsumerContext","Provider","value","__self","__source","fileName","lineNumber","columnNumber","QueryClientProvider","client","LiveKitRoom","serverUrl","token"],"sources":["../../../../src/components/LegendsPlatform/LegendsPlatform.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { LiveKitRoom } from '@livekit/components-react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { FetchPersonaChatService } from '../../services/FetchPersonaChatService';\nimport { SdkConsumerContext } from '../../sdk-consumer';\nimport {\n StartupTelemetrySession,\n type StartupTelemetryOptions,\n} from '../../startup-telemetry/attempt';\n\nexport type LegendsPlatformProps = {\n startupTelemetry?: StartupTelemetryOptions;\n chatId: string;\n namespace: string;\n apiKey?: string;\n personaChatService?: IPersonaChatService;\n store?: Store;\n tools?: ToolsRegistry;\n children: React.ReactNode;\n queryClient?: QueryClient;\n className?: string;\n};\n\nexport function LegendsPlatform(props: LegendsPlatformProps) {\n const {\n chatId,\n namespace,\n children,\n className,\n tools = {},\n apiKey,\n personaChatService,\n } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const resolvedService = useMemo<IPersonaChatService | undefined>(() => {\n if (personaChatService) {\n return personaChatService;\n }\n if (apiKey) {\n return new FetchPersonaChatService(apiKey);\n }\n return undefined;\n }, [personaChatService, apiKey]);\n\n const telemetryRef = useRef(props.startupTelemetry);\n telemetryRef.current = props.startupTelemetry;\n const telemetryEnabled = props.startupTelemetry?.enabled;\n const intentId = props.startupTelemetry?.intent?.id;\n const attemptId = props.startupTelemetry?.attempt?.id;\n const startupTelemetrySession = useMemo(() => {\n const config = telemetryRef.current;\n if (!telemetryEnabled || !config) {\n return undefined;\n }\n return new StartupTelemetrySession(\n {\n ...config,\n report: (event) => {\n if (telemetryRef.current?.enabled) {\n return telemetryRef.current.report?.(event);\n }\n return undefined;\n },\n },\n chatId,\n );\n // A new intent/attempt changes ownership; report callbacks stay live via the ref.\n }, [chatId, telemetryEnabled, intentId, attemptId]);\n\n const consumer = useMemo(\n () => ({\n chatId,\n namespace,\n tools,\n personaChatService: resolvedService,\n startupTelemetrySession,\n }),\n [chatId, namespace, tools, resolvedService, startupTelemetrySession],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>\n <LiveKitRoom\n className={className}\n serverUrl={undefined}\n token={undefined}\n >\n {children}\n </LiveKitRoom>\n </BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAIA,IAAAK,wBAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,QAAA,GAAAP,OAAA;AAGyC,IAAAQ,YAAA;AAAA,SAAAT,wBAAAU,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAZ,uBAAA,YAAAA,CAAAU,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_jotai","_componentsReact","_reactQuery","_reactBus","_FetchPersonaChatService","_sdkConsumer","_attempt","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LegendsPlatform","props","_props$startupTelemet","_props$startupTelemet2","_props$startupTelemet3","chatId","namespace","children","className","tools","apiKey","baseUrl","personaChatService","store","useMemo","createStore","queryClient","QueryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","resolvedService","FetchPersonaChatService","undefined","telemetryRef","useRef","startupTelemetry","current","telemetryEnabled","enabled","intentId","intent","id","attemptId","attempt","startupTelemetrySession","config","StartupTelemetrySession","report","event","_telemetryRef$current","consumer","createElement","SdkConsumerContext","Provider","value","__self","__source","fileName","lineNumber","columnNumber","QueryClientProvider","client","LiveKitRoom","serverUrl","token"],"sources":["../../../../src/components/LegendsPlatform/LegendsPlatform.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { LiveKitRoom } from '@livekit/components-react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { FetchPersonaChatService } from '../../services/FetchPersonaChatService';\nimport { SdkConsumerContext } from '../../sdk-consumer';\nimport {\n StartupTelemetrySession,\n type StartupTelemetryOptions,\n} from '../../startup-telemetry/attempt';\n\nexport type LegendsPlatformProps = {\n startupTelemetry?: StartupTelemetryOptions;\n chatId: string;\n namespace: string;\n /** Server-side only: a namespace API key never reaches a browser (use personaChatService with a BearerPersonaChatService there). */\n apiKey?: string;\n /** API host for the apiKey service. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n personaChatService?: IPersonaChatService;\n store?: Store;\n tools?: ToolsRegistry;\n children: React.ReactNode;\n queryClient?: QueryClient;\n className?: string;\n};\n\nexport function LegendsPlatform(props: LegendsPlatformProps) {\n const {\n chatId,\n namespace,\n children,\n className,\n tools = {},\n apiKey,\n baseUrl,\n personaChatService,\n } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const resolvedService = useMemo<IPersonaChatService | undefined>(() => {\n if (personaChatService) {\n return personaChatService;\n }\n if (apiKey) {\n return new FetchPersonaChatService(apiKey, { baseUrl });\n }\n return undefined;\n }, [personaChatService, apiKey, baseUrl]);\n\n const telemetryRef = useRef(props.startupTelemetry);\n telemetryRef.current = props.startupTelemetry;\n const telemetryEnabled = props.startupTelemetry?.enabled;\n const intentId = props.startupTelemetry?.intent?.id;\n const attemptId = props.startupTelemetry?.attempt?.id;\n const startupTelemetrySession = useMemo(() => {\n const config = telemetryRef.current;\n if (!telemetryEnabled || !config) {\n return undefined;\n }\n return new StartupTelemetrySession(\n {\n ...config,\n report: (event) => {\n if (telemetryRef.current?.enabled) {\n return telemetryRef.current.report?.(event);\n }\n return undefined;\n },\n },\n chatId,\n );\n // A new intent/attempt changes ownership; report callbacks stay live via the ref.\n }, [chatId, telemetryEnabled, intentId, attemptId]);\n\n const consumer = useMemo(\n () => ({\n chatId,\n namespace,\n tools,\n personaChatService: resolvedService,\n startupTelemetrySession,\n }),\n [chatId, namespace, tools, resolvedService, startupTelemetrySession],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>\n <LiveKitRoom\n className={className}\n serverUrl={undefined}\n token={undefined}\n >\n {children}\n </LiveKitRoom>\n </BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.LegendsPlatformCore = LegendsPlatformCore;
|
|
5
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
6
|
+
var _jotai = require("jotai");
|
|
7
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
8
|
+
var _reactBus = require("react-bus");
|
|
9
|
+
var _sdkConsumer = require("../../sdk-consumer");
|
|
10
|
+
var _jsxFileName = "/home/builduser/work/cfec65c05e11cc5b/packages/legends-platform-sdk/dist/cjs/components/LegendsPlatformCore/LegendsPlatformCore.tsx";
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
/**
|
|
13
|
+
* The text-chat providers without LiveKit, from the main entry: for a page that
|
|
14
|
+
* loads LiveKit only when a call starts (`@wix/legends-platform-sdk/livekit/sdk`'s
|
|
15
|
+
* LegendsPlatform then wraps the call, with the same store and query client).
|
|
16
|
+
*/
|
|
17
|
+
function LegendsPlatformCore(props) {
|
|
18
|
+
const {
|
|
19
|
+
chatId,
|
|
20
|
+
namespace,
|
|
21
|
+
personaChatService,
|
|
22
|
+
tools,
|
|
23
|
+
children
|
|
24
|
+
} = props;
|
|
25
|
+
const store = (0, _react.useMemo)(() => props.store || (0, _jotai.createStore)(), [props.store]);
|
|
26
|
+
const queryClient = (0, _react.useMemo)(() => props.queryClient || new _reactQuery.QueryClient({
|
|
27
|
+
defaultOptions: {
|
|
28
|
+
queries: {
|
|
29
|
+
refetchOnMount: false,
|
|
30
|
+
refetchOnWindowFocus: false
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}), [props.queryClient]);
|
|
34
|
+
const consumer = (0, _react.useMemo)(() => ({
|
|
35
|
+
chatId,
|
|
36
|
+
namespace,
|
|
37
|
+
tools: tools ?? {},
|
|
38
|
+
personaChatService
|
|
39
|
+
}), [chatId, namespace, tools, personaChatService]);
|
|
40
|
+
return /*#__PURE__*/_react.default.createElement(_sdkConsumer.SdkConsumerContext.Provider, {
|
|
41
|
+
value: consumer,
|
|
42
|
+
__self: this,
|
|
43
|
+
__source: {
|
|
44
|
+
fileName: _jsxFileName,
|
|
45
|
+
lineNumber: 49,
|
|
46
|
+
columnNumber: 5
|
|
47
|
+
}
|
|
48
|
+
}, /*#__PURE__*/_react.default.createElement(_reactQuery.QueryClientProvider, {
|
|
49
|
+
client: queryClient,
|
|
50
|
+
__self: this,
|
|
51
|
+
__source: {
|
|
52
|
+
fileName: _jsxFileName,
|
|
53
|
+
lineNumber: 50,
|
|
54
|
+
columnNumber: 7
|
|
55
|
+
}
|
|
56
|
+
}, /*#__PURE__*/_react.default.createElement(_jotai.Provider, {
|
|
57
|
+
store: store,
|
|
58
|
+
__self: this,
|
|
59
|
+
__source: {
|
|
60
|
+
fileName: _jsxFileName,
|
|
61
|
+
lineNumber: 51,
|
|
62
|
+
columnNumber: 9
|
|
63
|
+
}
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBus.Provider, {
|
|
65
|
+
__self: this,
|
|
66
|
+
__source: {
|
|
67
|
+
fileName: _jsxFileName,
|
|
68
|
+
lineNumber: 52,
|
|
69
|
+
columnNumber: 11
|
|
70
|
+
}
|
|
71
|
+
}, children))));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=LegendsPlatformCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_jotai","_reactQuery","_reactBus","_sdkConsumer","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LegendsPlatformCore","props","chatId","namespace","personaChatService","tools","children","store","useMemo","createStore","queryClient","QueryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","consumer","createElement","SdkConsumerContext","Provider","value","__self","__source","fileName","lineNumber","columnNumber","QueryClientProvider","client"],"sources":["../../../../src/components/LegendsPlatformCore/LegendsPlatformCore.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { SdkConsumerContext } from '../../sdk-consumer';\n\nexport type LegendsPlatformCoreProps = {\n chatId: string;\n namespace: string;\n /** Required: in a browser, a BearerPersonaChatService with the caller's own token. */\n personaChatService: IPersonaChatService;\n tools?: ToolsRegistry;\n /** Pass the same store and query client to LegendsPlatform when a call starts, to keep the chat state. */\n store?: Store;\n queryClient?: QueryClient;\n children: React.ReactNode;\n};\n\n/**\n * The text-chat providers without LiveKit, from the main entry: for a page that\n * loads LiveKit only when a call starts (`@wix/legends-platform-sdk/livekit/sdk`'s\n * LegendsPlatform then wraps the call, with the same store and query client).\n */\nexport function LegendsPlatformCore(props: LegendsPlatformCoreProps) {\n const { chatId, namespace, personaChatService, tools, children } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const consumer = useMemo(\n () => ({ chatId, namespace, tools: tools ?? {}, personaChatService }),\n [chatId, namespace, tools, personaChatService],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>{children}</BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
var _LegendsPlatformCore = require("./LegendsPlatformCore");
|
|
5
|
+
Object.keys(_LegendsPlatformCore).forEach(function (key) {
|
|
6
|
+
if (key === "default" || key === "__esModule") return;
|
|
7
|
+
if (key in exports && exports[key] === _LegendsPlatformCore[key]) return;
|
|
8
|
+
exports[key] = _LegendsPlatformCore[key];
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_LegendsPlatformCore","require","Object","keys","forEach","key","exports"],"sources":["../../../../src/components/LegendsPlatformCore/index.ts"],"sourcesContent":["export * from './LegendsPlatformCore';\n"],"mappings":";;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,oBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,oBAAA,CAAAK,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAL,oBAAA,CAAAK,GAAA;AAAA","ignoreList":[]}
|
package/dist/cjs/sdk.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
var _exportNames = {
|
|
5
|
+
BearerPersonaChatService: true,
|
|
6
|
+
LegendsPlatformCore: true,
|
|
5
7
|
createStartupIntent: true,
|
|
6
8
|
StartupAttempt: true
|
|
7
9
|
};
|
|
8
|
-
exports.createStartupIntent = exports.StartupAttempt = void 0;
|
|
10
|
+
exports.createStartupIntent = exports.StartupAttempt = exports.LegendsPlatformCore = exports.BearerPersonaChatService = void 0;
|
|
9
11
|
var _types = require("./types");
|
|
10
12
|
Object.keys(_types).forEach(function (key) {
|
|
11
13
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -132,6 +134,10 @@ Object.keys(_types2).forEach(function (key) {
|
|
|
132
134
|
if (key in exports && exports[key] === _types2[key]) return;
|
|
133
135
|
exports[key] = _types2[key];
|
|
134
136
|
});
|
|
137
|
+
var _BearerPersonaChatService = require("./services/BearerPersonaChatService");
|
|
138
|
+
exports.BearerPersonaChatService = _BearerPersonaChatService.BearerPersonaChatService;
|
|
139
|
+
var _LegendsPlatformCore = require("./components/LegendsPlatformCore");
|
|
140
|
+
exports.LegendsPlatformCore = _LegendsPlatformCore.LegendsPlatformCore;
|
|
135
141
|
var _attempt = require("./startup-telemetry/attempt");
|
|
136
142
|
exports.createStartupIntent = _attempt.createStartupIntent;
|
|
137
143
|
exports.StartupAttempt = _attempt.StartupAttempt;
|
package/dist/cjs/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","_useTextChat","_useTranscriptions","_useConversationStatus","_useMicrophone","_useSpeaker","_useCamera","_useMediaRecorder","_useConversationTimer","_useConversationEvents","_useUserActivity","_useAudio","_useConnectionState","_useActivityState","_usePictureInPicture","_useMediaPermissions","_useTools","_types2","_attempt","createStartupIntent","StartupAttempt"],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n\nexport {\n createStartupIntent,\n StartupAttempt,\n} from './startup-telemetry/attempt';\nexport type {\n StartupIntent,\n StartupReport,\n StartupTelemetryOptions,\n} from './startup-telemetry/attempt';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","_useTextChat","_useTranscriptions","_useConversationStatus","_useMicrophone","_useSpeaker","_useCamera","_useMediaRecorder","_useConversationTimer","_useConversationEvents","_useUserActivity","_useAudio","_useConnectionState","_useActivityState","_usePictureInPicture","_useMediaPermissions","_useTools","_types2","_BearerPersonaChatService","BearerPersonaChatService","_LegendsPlatformCore","LegendsPlatformCore","_attempt","createStartupIntent","StartupAttempt"],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n\nexport { BearerPersonaChatService } from './services/BearerPersonaChatService';\nexport type { BearerPersonaChatServiceOptions } from './services/BearerPersonaChatService';\nexport { LegendsPlatformCore } from './components/LegendsPlatformCore';\nexport type { LegendsPlatformCoreProps } from './components/LegendsPlatformCore';\n\nexport {\n createStartupIntent,\n StartupAttempt,\n} from './startup-telemetry/attempt';\nexport type {\n StartupIntent,\n StartupReport,\n StartupTelemetryOptions,\n} from './startup-telemetry/attempt';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.BearerPersonaChatService = void 0;
|
|
6
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
|
+
var _http = require("../types/http");
|
|
8
|
+
var _FetchPersonaChatService = require("./FetchPersonaChatService");
|
|
9
|
+
const PERSONA_CHAT = '/_api/persona-chat-service/v1';
|
|
10
|
+
function resolveLimitMs(limitation) {
|
|
11
|
+
if (!limitation) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
switch (limitation.type) {
|
|
15
|
+
case 'MINUTES':
|
|
16
|
+
return (limitation.limit ?? 0) * 60 * 1000;
|
|
17
|
+
case 'SECONDS':
|
|
18
|
+
return (limitation.limit ?? 0) * 1000;
|
|
19
|
+
case 'TOKENS':
|
|
20
|
+
default:
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function parseJson(text) {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(text);
|
|
27
|
+
} catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function toMessage(m) {
|
|
32
|
+
return {
|
|
33
|
+
id: m.id ?? '',
|
|
34
|
+
content: m.content ?? '',
|
|
35
|
+
role: m.role,
|
|
36
|
+
createdAt: m.createdAt ?? m.createdDate,
|
|
37
|
+
...(m.attachments ? {
|
|
38
|
+
attachments: m.attachments
|
|
39
|
+
} : {})
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The persona-chat service for a browser: authenticated with the caller's own
|
|
45
|
+
* bearer token (never a namespace API key), on the same REST paths the
|
|
46
|
+
* Legend's own page uses for a visitor.
|
|
47
|
+
*/
|
|
48
|
+
class BearerPersonaChatService {
|
|
49
|
+
constructor(options) {
|
|
50
|
+
this.options = options;
|
|
51
|
+
(0, _defineProperty2.default)(this, "baseUrl", void 0);
|
|
52
|
+
this.baseUrl = (options.baseUrl ?? _FetchPersonaChatService.DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
53
|
+
}
|
|
54
|
+
async request(method, path, body, retried = false) {
|
|
55
|
+
const token = await this.options.getAccessToken();
|
|
56
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
57
|
+
method,
|
|
58
|
+
headers: {
|
|
59
|
+
...(body === undefined ? {} : {
|
|
60
|
+
'Content-Type': 'application/json'
|
|
61
|
+
}),
|
|
62
|
+
Authorization: token
|
|
63
|
+
},
|
|
64
|
+
...(body === undefined ? {} : {
|
|
65
|
+
body: JSON.stringify(body)
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
if (response.status === 401 && !retried && this.options.onUnauthorized && (await this.options.onUnauthorized())) {
|
|
69
|
+
return this.request(method, path, body, true);
|
|
70
|
+
}
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const text = await response.text().catch(() => '');
|
|
73
|
+
throw new _http.HttpError(response.status, `Request failed: ${response.status} ${text}`, parseJson(text));
|
|
74
|
+
}
|
|
75
|
+
return response.json();
|
|
76
|
+
}
|
|
77
|
+
async createConversation(kind, params) {
|
|
78
|
+
const {
|
|
79
|
+
chatId,
|
|
80
|
+
namespace,
|
|
81
|
+
chatConfig,
|
|
82
|
+
firstConversation,
|
|
83
|
+
lastConversationTopic,
|
|
84
|
+
conversationLanguage
|
|
85
|
+
} = params;
|
|
86
|
+
const data = await this.request('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/${kind}`, {
|
|
87
|
+
namespace,
|
|
88
|
+
...(chatConfig ? {
|
|
89
|
+
chatConfig
|
|
90
|
+
} : {}),
|
|
91
|
+
...(firstConversation !== undefined ? {
|
|
92
|
+
firstConversation
|
|
93
|
+
} : {}),
|
|
94
|
+
...(lastConversationTopic ? {
|
|
95
|
+
lastConversationTopic
|
|
96
|
+
} : {}),
|
|
97
|
+
...(conversationLanguage !== undefined ? {
|
|
98
|
+
conversationLanguage
|
|
99
|
+
} : {})
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
url: data.conversationUrl ?? '',
|
|
103
|
+
id: data.interactiveConversationId ?? '',
|
|
104
|
+
limit: resolveLimitMs(data.limitation)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
createVoiceConversation(params) {
|
|
108
|
+
return this.createConversation('create-voice-conversation', params);
|
|
109
|
+
}
|
|
110
|
+
createInteractiveConversation(params) {
|
|
111
|
+
return this.createConversation('create-interactive-conversation', params);
|
|
112
|
+
}
|
|
113
|
+
async endInteractiveConversation(params) {
|
|
114
|
+
const {
|
|
115
|
+
chatId,
|
|
116
|
+
conversationId,
|
|
117
|
+
namespace
|
|
118
|
+
} = params;
|
|
119
|
+
await this.request('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/end-interactive-conversation`, {
|
|
120
|
+
namespace,
|
|
121
|
+
interactiveConversationId: conversationId
|
|
122
|
+
}).catch(() => {
|
|
123
|
+
// best-effort
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async sendChatMessage(params) {
|
|
127
|
+
const {
|
|
128
|
+
chatId,
|
|
129
|
+
namespace,
|
|
130
|
+
message,
|
|
131
|
+
functionCallResults,
|
|
132
|
+
chatConfig,
|
|
133
|
+
attachments,
|
|
134
|
+
metadata,
|
|
135
|
+
conversationLanguage
|
|
136
|
+
} = params;
|
|
137
|
+
const data = await this.request('POST', `${PERSONA_CHAT}/chat/messages`, {
|
|
138
|
+
chatId,
|
|
139
|
+
namespace,
|
|
140
|
+
...(message ? {
|
|
141
|
+
message
|
|
142
|
+
} : {}),
|
|
143
|
+
...(functionCallResults ? {
|
|
144
|
+
functionCallResults
|
|
145
|
+
} : {}),
|
|
146
|
+
...(chatConfig ? {
|
|
147
|
+
chatConfig
|
|
148
|
+
} : {}),
|
|
149
|
+
...(attachments ? {
|
|
150
|
+
attachments
|
|
151
|
+
} : {}),
|
|
152
|
+
...(metadata ? {
|
|
153
|
+
metadata
|
|
154
|
+
} : {}),
|
|
155
|
+
...(conversationLanguage !== undefined ? {
|
|
156
|
+
conversationLanguage
|
|
157
|
+
} : {})
|
|
158
|
+
});
|
|
159
|
+
return {
|
|
160
|
+
functionCalls: data.functionCalls,
|
|
161
|
+
messages: (data.messages ?? []).map(toMessage)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async queryChatMessages(params) {
|
|
165
|
+
var _data$pagingMetadata;
|
|
166
|
+
const {
|
|
167
|
+
chatId,
|
|
168
|
+
namespace,
|
|
169
|
+
limit = 100,
|
|
170
|
+
cursor
|
|
171
|
+
} = params;
|
|
172
|
+
const query = new URLSearchParams({
|
|
173
|
+
namespace,
|
|
174
|
+
'query.cursorPaging.limit': String(limit),
|
|
175
|
+
...(cursor ? {
|
|
176
|
+
'query.cursorPaging.cursor': cursor
|
|
177
|
+
} : {})
|
|
178
|
+
});
|
|
179
|
+
const data = await this.request('GET', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/messages?${query}`);
|
|
180
|
+
return {
|
|
181
|
+
messages: (data.chatMessages ?? []).map(toMessage),
|
|
182
|
+
nextCursor: (_data$pagingMetadata = data.pagingMetadata) == null || (_data$pagingMetadata = _data$pagingMetadata.cursors) == null ? void 0 : _data$pagingMetadata.next
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.BearerPersonaChatService = BearerPersonaChatService;
|
|
187
|
+
//# sourceMappingURL=BearerPersonaChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_http","require","_FetchPersonaChatService","PERSONA_CHAT","resolveLimitMs","limitation","undefined","type","limit","parseJson","text","JSON","parse","toMessage","m","id","content","role","createdAt","createdDate","attachments","BearerPersonaChatService","constructor","options","_defineProperty2","default","baseUrl","DEFAULT_BASE_URL","replace","request","method","path","body","retried","token","getAccessToken","response","fetch","headers","Authorization","stringify","status","onUnauthorized","ok","catch","HttpError","json","createConversation","kind","params","chatId","namespace","chatConfig","firstConversation","lastConversationTopic","conversationLanguage","data","encodeURIComponent","url","conversationUrl","interactiveConversationId","createVoiceConversation","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","metadata","functionCalls","messages","map","queryChatMessages","_data$pagingMetadata","cursor","query","URLSearchParams","String","chatMessages","nextCursor","pagingMetadata","cursors","next","exports"],"sources":["../../../src/services/BearerPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\nimport { DEFAULT_BASE_URL } from './FetchPersonaChatService';\n\nexport interface BearerPersonaChatServiceOptions {\n /** API host. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n /**\n * The caller's own access token, e.g. a visitor token minted by the Legend's\n * sign-in app. Sent as the Authorization header, the way Wix's headless\n * clients send it. Called for every request, so a refreshed token is used.\n */\n getAccessToken: () => string | Promise<string>;\n /**\n * Called once when a request answers 401. Refresh the token and resolve true\n * to retry the request with the new token; resolve false to fail it.\n */\n onUnauthorized?: () => Promise<boolean>;\n}\n\nconst PERSONA_CHAT = '/_api/persona-chat-service/v1';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\ntype RawMessage = {\n id?: string;\n content?: string;\n role?: string;\n createdAt?: string;\n createdDate?: string;\n attachments?: ChatMessage['attachments'];\n};\n\nfunction toMessage(m: RawMessage): ChatMessage {\n return {\n id: m.id ?? '',\n content: m.content ?? '',\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt ?? m.createdDate,\n ...(m.attachments ? { attachments: m.attachments } : {}),\n };\n}\n\n/**\n * The persona-chat service for a browser: authenticated with the caller's own\n * bearer token (never a namespace API key), on the same REST paths the\n * Legend's own page uses for a visitor.\n */\nexport class BearerPersonaChatService implements IPersonaChatService {\n private readonly baseUrl: string;\n\n constructor(private readonly options: BearerPersonaChatServiceOptions) {\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n }\n\n private async request<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n retried = false,\n ): Promise<T> {\n const token = await this.options.getAccessToken();\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: {\n ...(body === undefined ? {} : { 'Content-Type': 'application/json' }),\n Authorization: token,\n },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n\n if (\n response.status === 401 &&\n !retried &&\n this.options.onUnauthorized &&\n (await this.options.onUnauthorized())\n ) {\n return this.request<T>(method, path, body, true);\n }\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n private async createConversation(\n kind: 'create-voice-conversation' | 'create-interactive-conversation',\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const {\n chatId,\n namespace,\n chatConfig,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n } = params;\n const data = await this.request<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/${kind}`, {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(firstConversation !== undefined ? { firstConversation } : {}),\n ...(lastConversationTopic ? { lastConversationTopic } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n return this.createConversation('create-voice-conversation', params);\n }\n\n createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n return this.createConversation('create-interactive-conversation', params);\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n await this.request(\n 'POST',\n `${PERSONA_CHAT}/chats/${encodeURIComponent(\n chatId,\n )}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n } = params;\n const data = await this.request<{\n functionCalls?: ChatFunctionCall[];\n messages?: RawMessage[];\n }>('POST', `${PERSONA_CHAT}/chat/messages`, {\n chatId,\n namespace,\n ...(message ? { message } : {}),\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(metadata ? { metadata } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n return {\n functionCalls: data.functionCalls,\n messages: (data.messages ?? []).map(toMessage),\n };\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n const query = new URLSearchParams({\n namespace,\n 'query.cursorPaging.limit': String(limit),\n ...(cursor ? { 'query.cursorPaging.cursor': cursor } : {}),\n });\n const data = await this.request<{\n chatMessages?: RawMessage[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(\n 'GET',\n `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/messages?${query}`,\n );\n return {\n messages: (data.chatMessages ?? []).map(toMessage),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
exports.__esModule = true;
|
|
5
|
-
exports.FetchPersonaChatService = void 0;
|
|
5
|
+
exports.FetchPersonaChatService = exports.DEFAULT_BASE_URL = void 0;
|
|
6
6
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
7
|
var _http = require("../types/http");
|
|
8
|
-
const
|
|
8
|
+
const DEFAULT_BASE_URL = exports.DEFAULT_BASE_URL = 'https://www.wixapis.com';
|
|
9
9
|
function resolveLimitMs(limitation) {
|
|
10
10
|
if (!limitation) {
|
|
11
11
|
return undefined;
|
|
@@ -21,9 +21,15 @@ function resolveLimitMs(limitation) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
class FetchPersonaChatService {
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Server side only: a namespace API key skips owner checks and must never
|
|
26
|
+
* reach a browser. A browser uses BearerPersonaChatService with a visitor token.
|
|
27
|
+
*/
|
|
28
|
+
constructor(apiKey, options = {}) {
|
|
25
29
|
(0, _defineProperty2.default)(this, "apiKey", void 0);
|
|
30
|
+
(0, _defineProperty2.default)(this, "baseUrl", void 0);
|
|
26
31
|
this.apiKey = apiKey;
|
|
32
|
+
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
27
33
|
}
|
|
28
34
|
headers() {
|
|
29
35
|
return {
|
|
@@ -32,7 +38,7 @@ class FetchPersonaChatService {
|
|
|
32
38
|
};
|
|
33
39
|
}
|
|
34
40
|
async post(path, body) {
|
|
35
|
-
const response = await fetch(`${
|
|
41
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
36
42
|
method: 'POST',
|
|
37
43
|
headers: this.headers(),
|
|
38
44
|
body: JSON.stringify(body)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_http","require","BASE_URL","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","_defineProperty2","default","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","HttpError","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","conversationLanguage","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","queryChatMessages","_data$pagingMetadata","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","exports","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${BASE_URL}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n conversationLanguage,\n } = params;\n\n return this.post<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_http","require","DEFAULT_BASE_URL","exports","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","options","_defineProperty2","default","baseUrl","replace","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","HttpError","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","conversationLanguage","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","queryChatMessages","_data$pagingMetadata","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nexport const DEFAULT_BASE_URL = 'https://www.wixapis.com';\n\nexport interface FetchPersonaChatServiceOptions {\n /** API host, e.g. a local or test gateway. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n}\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n /**\n * Server side only: a namespace API key skips owner checks and must never\n * reach a browser. A browser uses BearerPersonaChatService with a visitor token.\n */\n constructor(apiKey: string, options: FetchPersonaChatServiceOptions = {}) {\n this.apiKey = apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n conversationLanguage,\n } = params;\n\n return this.post<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|