@memberjunction/realtime-widget 6.2.0-edge.3 → 6.2.0-edge.4
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/dist/transport/runtime-widget-transport.d.ts +1 -1
- package/dist/transport/runtime-widget-transport.d.ts.map +1 -1
- package/dist/transport/runtime-widget-transport.js +10 -3
- package/dist/transport/runtime-widget-transport.js.map +1 -1
- package/dist/voice/guest-voice-mint.d.ts +10 -5
- package/dist/voice/guest-voice-mint.d.ts.map +1 -1
- package/dist/voice/guest-voice-mint.js +81 -24
- package/dist/voice/guest-voice-mint.js.map +1 -1
- package/package.json +9 -9
|
@@ -48,7 +48,7 @@ export declare class RuntimeWidgetTransport implements IWidgetTransport {
|
|
|
48
48
|
* `conversationDetailId` so the reply lands as an agent turn the widget can read back.
|
|
49
49
|
*/
|
|
50
50
|
private createAgentResponseDetail;
|
|
51
|
-
/** Reads the newest AI Conversation Detail
|
|
51
|
+
/** Reads the newest AI Conversation Detail in Main (the agent's reply). */
|
|
52
52
|
private readLatestAgentReply;
|
|
53
53
|
}
|
|
54
54
|
//# sourceMappingURL=runtime-widget-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-widget-transport.d.ts","sourceRoot":"","sources":["../../src/transport/runtime-widget-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"runtime-widget-transport.d.ts","sourceRoot":"","sources":["../../src/transport/runtime-widget-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKxG,6FAA6F;AAC7F,qBAAa,sBAAuB,YAAW,gBAAgB;IAO/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAkC;gBAErB,MAAM,EAAE,MAAM;IAE3C,qGAAqG;IACxF,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9D,8FAA8F;IACvF,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,6EAA6E;IAChE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmCzF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,WAAW;IAMnB,gEAAgE;YAClD,kBAAkB;IA+ChC,mFAAmF;YACrE,eAAe;IAc7B;;;;OAIG;YACW,yBAAyB;IAkBvC,2EAA2E;YAC7D,oBAAoB;CAuBrC"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* @module @memberjunction/realtime-widget
|
|
15
15
|
*/
|
|
16
16
|
import { RunView } from '@memberjunction/core';
|
|
17
|
+
import { ConversationEngine } from '@memberjunction/core-entities';
|
|
17
18
|
import { setupGraphQLClient, GraphQLProviderConfigData } from '@memberjunction/graphql-dataprovider';
|
|
18
19
|
import { ConversationsRuntime } from '@memberjunction/conversations-runtime';
|
|
19
20
|
import { agentFailureMessage } from '@memberjunction/ai-core-plus';
|
|
@@ -185,13 +186,19 @@ export class RuntimeWidgetTransport {
|
|
|
185
186
|
}
|
|
186
187
|
return detail;
|
|
187
188
|
}
|
|
188
|
-
/** Reads the newest AI Conversation Detail
|
|
189
|
+
/** Reads the newest AI Conversation Detail in Main (the agent's reply). */
|
|
189
190
|
async readLatestAgentReply() {
|
|
191
|
+
const conversationId = this.conversationId;
|
|
192
|
+
if (!conversationId || !this.contextUser) {
|
|
193
|
+
return '';
|
|
194
|
+
}
|
|
195
|
+
// The widget's conversations have no forks.
|
|
196
|
+
const scope = ConversationEngine.TrunkScope(conversationId);
|
|
190
197
|
const rv = new RunView();
|
|
191
198
|
const result = await rv.RunView({
|
|
192
199
|
EntityName: CONVERSATION_DETAILS_ENTITY,
|
|
193
|
-
ExtraFilter:
|
|
194
|
-
OrderBy: '
|
|
200
|
+
ExtraFilter: `${ConversationEngine.ScopeFilter(scope)} AND [Role]='AI'`,
|
|
201
|
+
OrderBy: 'Sequence DESC',
|
|
195
202
|
MaxRows: 1,
|
|
196
203
|
ResultType: 'entity_object',
|
|
197
204
|
}, this.contextUser ?? undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-widget-transport.js","sourceRoot":"","sources":["../../src/transport/runtime-widget-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAyC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-widget-transport.js","sourceRoot":"","sources":["../../src/transport/runtime-widget-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* @fileoverview The production voice-mint function: calls the `StartRealtimeClientSession`
|
|
3
3
|
* GraphQL mutation (via the already-configured guest GraphQLDataProvider) for the widget's
|
|
4
4
|
* PINNED agent and maps the result to the `ClientRealtimeSessionConfig` the realtime client
|
|
5
|
-
* applies verbatim — exactly mirroring Explorer's `buildClientConfig
|
|
6
|
-
* mint resolver; no new server endpoint.
|
|
5
|
+
* applies verbatim — exactly mirroring Explorer's `buildClientConfig`, a relay session's
|
|
6
|
+
* `Transport` and `RelayUrl` included. Reuses the shipped mint resolver; no new server endpoint.
|
|
7
|
+
* The widget shows no agent video, so it tells the mint (`showsAgentVideo: false`) and the server
|
|
8
|
+
* asks the model for no avatar.
|
|
7
9
|
*
|
|
8
|
-
* NOTE: live
|
|
9
|
-
*
|
|
10
|
-
* exercised offline.
|
|
10
|
+
* NOTE: a live mint needs the guest GraphQL provider configured by RuntimeWidgetTransport and a
|
|
11
|
+
* running MJAPI; the unit tests drive it through a stand-in provider.
|
|
11
12
|
*
|
|
12
13
|
* @module @memberjunction/realtime-widget
|
|
13
14
|
*/
|
|
@@ -18,6 +19,10 @@ import type { VoiceMintFn } from './realtime-voice-controller.js';
|
|
|
18
19
|
* passes the enabled channels' client-tool definitions, which are declared to the model at session
|
|
19
20
|
* start (so it can call e.g. `Whiteboard_*`); `RealtimeToolDefinition` is structurally identical to
|
|
20
21
|
* {@link WidgetChannelToolDefinition} (Name / Description / ParametersSchema), so they serialize as-is.
|
|
22
|
+
*
|
|
23
|
+
* It asks for the session's transport and relay URL too, and says the widget shows no agent video
|
|
24
|
+
* (`showsAgentVideo: false`). A server that predates one of them rejects the mint at validation; the
|
|
25
|
+
* function then mints without that one alone, and keeps doing so.
|
|
21
26
|
*/
|
|
22
27
|
export declare function CreateGuestVoiceMint(session: WidgetSession): VoiceMintFn;
|
|
23
28
|
/** @deprecated Use {@link CreateGuestVoiceMint}. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guest-voice-mint.d.ts","sourceRoot":"","sources":["../../src/voice/guest-voice-mint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guest-voice-mint.d.ts","sourceRoot":"","sources":["../../src/voice/guest-voice-mint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,gCAAgC,CAAC;AA4EnF;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CA2BxE;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAExE"}
|
|
@@ -2,54 +2,111 @@
|
|
|
2
2
|
* @fileoverview The production voice-mint function: calls the `StartRealtimeClientSession`
|
|
3
3
|
* GraphQL mutation (via the already-configured guest GraphQLDataProvider) for the widget's
|
|
4
4
|
* PINNED agent and maps the result to the `ClientRealtimeSessionConfig` the realtime client
|
|
5
|
-
* applies verbatim — exactly mirroring Explorer's `buildClientConfig
|
|
6
|
-
* mint resolver; no new server endpoint.
|
|
5
|
+
* applies verbatim — exactly mirroring Explorer's `buildClientConfig`, a relay session's
|
|
6
|
+
* `Transport` and `RelayUrl` included. Reuses the shipped mint resolver; no new server endpoint.
|
|
7
|
+
* The widget shows no agent video, so it tells the mint (`showsAgentVideo: false`) and the server
|
|
8
|
+
* asks the model for no avatar.
|
|
7
9
|
*
|
|
8
|
-
* NOTE: live
|
|
9
|
-
*
|
|
10
|
-
* exercised offline.
|
|
10
|
+
* NOTE: a live mint needs the guest GraphQL provider configured by RuntimeWidgetTransport and a
|
|
11
|
+
* running MJAPI; the unit tests drive it through a stand-in provider.
|
|
11
12
|
*
|
|
12
13
|
* @module @memberjunction/realtime-widget
|
|
13
14
|
*/
|
|
14
15
|
import { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
import { ParseRealtimeClientTransport } from '@memberjunction/ai';
|
|
17
|
+
/** The fields every server returns. */
|
|
18
|
+
const MINT_FIELDS = ['AgentSessionId', 'Provider', 'Model', 'EphemeralToken', 'ExpiresAt', 'SessionConfigJson'];
|
|
19
|
+
/** A relay session's transport and URL. A server that predates them rejects the mint at validation. */
|
|
20
|
+
const TRANSPORT_FIELDS = ['Transport', 'RelayUrl'];
|
|
21
|
+
/** What the widget says, once per mint function, when the server rejects an extension. */
|
|
22
|
+
const UNSUPPORTED_WARNINGS = {
|
|
23
|
+
Transport: '[RealtimeWidget] The server does not report the session transport — minting without it; every session connects directly.',
|
|
24
|
+
NoAgentVideo: "[RealtimeWidget] The server does not take showsAgentVideo — minting without it; it may ask for an avatar the widget can't show (the call stays audio only).",
|
|
25
|
+
};
|
|
26
|
+
/** The mint mutation, with the extensions asked for. */
|
|
27
|
+
function startRealtimeMutation(asked) {
|
|
28
|
+
const fields = asked.Transport ? [...MINT_FIELDS, ...TRANSPORT_FIELDS] : MINT_FIELDS;
|
|
29
|
+
const variable = asked.NoAgentVideo ? ', $showsAgentVideo: Boolean' : '';
|
|
30
|
+
const argument = asked.NoAgentVideo ? ', showsAgentVideo: $showsAgentVideo' : '';
|
|
31
|
+
return `
|
|
32
|
+
mutation StartWidgetVoiceSession($targetAgentId: String, $clientToolsJson: String${variable}) {
|
|
33
|
+
StartRealtimeClientSession(targetAgentId: $targetAgentId, clientToolsJson: $clientToolsJson${argument}) {
|
|
34
|
+
${fields.join('\n ')}
|
|
24
35
|
}
|
|
25
36
|
}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The extension a mint failure rejects, when it is a server that predates one rejecting it at validation
|
|
40
|
+
* (`Unknown argument "showsAgentVideo"…`, `Cannot query field "Transport"…`); `null` for any other failure. The quoted
|
|
41
|
+
* field names, not the bare words: "Transport" alone could be any transport error, and "RelayUrl" any message that
|
|
42
|
+
* names the field.
|
|
43
|
+
*/
|
|
44
|
+
function rejectedExtension(error, asked) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
if (asked.NoAgentVideo && message.includes('showsAgentVideo')) {
|
|
47
|
+
return 'NoAgentVideo';
|
|
48
|
+
}
|
|
49
|
+
if (asked.Transport && (message.includes('field "Transport"') || message.includes('field "RelayUrl"'))) {
|
|
50
|
+
return 'Transport';
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
26
54
|
/**
|
|
27
55
|
* Builds a VoiceMintFn that mints a realtime session for the widget's pinned agent. The controller
|
|
28
56
|
* passes the enabled channels' client-tool definitions, which are declared to the model at session
|
|
29
57
|
* start (so it can call e.g. `Whiteboard_*`); `RealtimeToolDefinition` is structurally identical to
|
|
30
58
|
* {@link WidgetChannelToolDefinition} (Name / Description / ParametersSchema), so they serialize as-is.
|
|
59
|
+
*
|
|
60
|
+
* It asks for the session's transport and relay URL too, and says the widget shows no agent video
|
|
61
|
+
* (`showsAgentVideo: false`). A server that predates one of them rejects the mint at validation; the
|
|
62
|
+
* function then mints without that one alone, and keeps doing so.
|
|
31
63
|
*/
|
|
32
64
|
export function CreateGuestVoiceMint(session) {
|
|
65
|
+
const serverLacks = new Set();
|
|
66
|
+
const mint = async (variables) => {
|
|
67
|
+
let asked = { Transport: !serverLacks.has('Transport'), NoAgentVideo: !serverLacks.has('NoAgentVideo') };
|
|
68
|
+
for (;;) {
|
|
69
|
+
try {
|
|
70
|
+
const sent = asked.NoAgentVideo ? { ...variables, showsAgentVideo: false } : variables;
|
|
71
|
+
return (await GraphQLDataProvider.Instance.ExecuteGQL(startRealtimeMutation(asked), sent));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const rejected = rejectedExtension(error, asked);
|
|
75
|
+
if (!rejected) {
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
serverLacks.add(rejected);
|
|
79
|
+
console.warn(UNSUPPORTED_WARNINGS[rejected]);
|
|
80
|
+
asked = { ...asked, [rejected]: false };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
33
84
|
return async (clientTools) => {
|
|
34
|
-
const data =
|
|
85
|
+
const data = await mint({
|
|
35
86
|
targetAgentId: session.pinnedAgentId,
|
|
36
87
|
clientToolsJson: clientTools.length > 0 ? JSON.stringify(clientTools) : undefined,
|
|
37
|
-
})
|
|
88
|
+
});
|
|
38
89
|
const r = data.StartRealtimeClientSession;
|
|
39
|
-
|
|
40
|
-
Provider: r.Provider,
|
|
41
|
-
Model: r.Model,
|
|
42
|
-
EphemeralToken: r.EphemeralToken,
|
|
43
|
-
ExpiresAt: r.ExpiresAt,
|
|
44
|
-
SessionConfig: parseSessionConfig(r.SessionConfigJson),
|
|
45
|
-
};
|
|
46
|
-
return { provider: r.Provider, sessionConfig, agentSessionId: r.AgentSessionId };
|
|
90
|
+
return { provider: r.Provider, sessionConfig: toClientConfig(r), agentSessionId: r.AgentSessionId };
|
|
47
91
|
};
|
|
48
92
|
}
|
|
49
93
|
/** @deprecated Use {@link CreateGuestVoiceMint}. */
|
|
50
94
|
export function createGuestVoiceMint(session) {
|
|
51
95
|
return CreateGuestVoiceMint(session);
|
|
52
96
|
}
|
|
97
|
+
/** The minted session as the realtime client connects with it; a relay session's transport and URL go as minted. */
|
|
98
|
+
function toClientConfig(r) {
|
|
99
|
+
const transport = ParseRealtimeClientTransport(r.Transport);
|
|
100
|
+
return {
|
|
101
|
+
Provider: r.Provider,
|
|
102
|
+
Model: r.Model,
|
|
103
|
+
EphemeralToken: r.EphemeralToken,
|
|
104
|
+
ExpiresAt: r.ExpiresAt,
|
|
105
|
+
...(transport ? { Transport: transport } : {}),
|
|
106
|
+
...(r.RelayUrl ? { RelayUrl: r.RelayUrl } : {}),
|
|
107
|
+
SessionConfig: parseSessionConfig(r.SessionConfigJson),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
53
110
|
/** Parses the server-built session config; an empty object on failure (client applies nothing). */
|
|
54
111
|
function parseSessionConfig(json) {
|
|
55
112
|
if (!json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guest-voice-mint.js","sourceRoot":"","sources":["../../src/voice/guest-voice-mint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guest-voice-mint.js","sourceRoot":"","sources":["../../src/voice/guest-voice-mint.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/realtime-widget",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.2.0-edge.
|
|
4
|
+
"version": "6.2.0-edge.4",
|
|
5
5
|
"description": "MemberJunction: Droppable, embeddable public customer-support widget (text + voice). A shadow-DOM web component that reuses ConversationsRuntime + the realtime client stack against MJAPI with a guest session JWT. No MJ login required.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"author": "MemberJunction.com",
|
|
12
12
|
"license": "BUSL-1.1",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
15
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
16
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
17
|
-
"@memberjunction/ai": "6.2.0-edge.
|
|
18
|
-
"@memberjunction/ai-core-plus": "6.2.0-edge.
|
|
19
|
-
"@memberjunction/ai-realtime-client": "6.2.0-edge.
|
|
20
|
-
"@memberjunction/conversations-runtime": "6.2.0-edge.
|
|
21
|
-
"@memberjunction/graphql-dataprovider": "6.2.0-edge.
|
|
14
|
+
"@memberjunction/global": "6.2.0-edge.4",
|
|
15
|
+
"@memberjunction/core": "6.2.0-edge.4",
|
|
16
|
+
"@memberjunction/core-entities": "6.2.0-edge.4",
|
|
17
|
+
"@memberjunction/ai": "6.2.0-edge.4",
|
|
18
|
+
"@memberjunction/ai-core-plus": "6.2.0-edge.4",
|
|
19
|
+
"@memberjunction/ai-realtime-client": "6.2.0-edge.4",
|
|
20
|
+
"@memberjunction/conversations-runtime": "6.2.0-edge.4",
|
|
21
|
+
"@memberjunction/graphql-dataprovider": "6.2.0-edge.4"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "24.10.11",
|