@hashgraphonline/standards-sdk 0.1.186 → 0.1.188
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 +3 -0
- package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client.d.ts +1 -0
- package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +149 -0
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
- package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser-root/standards-sdk.root-browser.js +404 -15
- package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +1 -0
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +1 -0
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +50 -27
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es116.js +2 -2
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +4 -4
- package/dist/es/standards-sdk.es121.js +11 -11
- package/dist/es/standards-sdk.es126.js +1 -1
- package/dist/es/standards-sdk.es132.js +3 -2
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +2 -2
- package/dist/es/standards-sdk.es148.js +1 -1
- package/dist/es/standards-sdk.es150.js +23 -14
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +372 -248
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +259 -4
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +4 -81
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +71 -77
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +80 -53
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +59 -2546
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2547 -159
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +159 -7
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +3 -2
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +7 -86
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +64 -43
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +57 -186
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +188 -20
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +22 -54
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +41 -78
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +81 -35
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +36 -191
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +191 -43
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +46 -39
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +37 -44
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +46 -39
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +29 -102
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +104 -36
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +43 -33
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +44 -72
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +65 -61
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +63 -39
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +44 -36
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +36 -30
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +6 -5
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es180.js +30 -34
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +34 -48
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +48 -138
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +133 -37
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +34 -12474
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +12477 -12
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +55 -671
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +71 -63
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +192 -48
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +4 -3
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es190.js +15 -79
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es191.js +659 -187
- package/dist/es/standards-sdk.es191.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +60 -126
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +104 -482
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es200.js +480 -222
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +239 -176
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +178 -101
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +75 -108
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +116 -148
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +146 -646
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +661 -162
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +156 -206
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +219 -223
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +242 -0
- package/dist/es/standards-sdk.es209.js.map +1 -0
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es27.js +6 -5
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es35.js +4 -3
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +3 -3
- package/dist/es/standards-sdk.es37.js +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es67.js +4 -3
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +1 -1
- package/dist/es/standards-sdk.es72.js +2 -2
- package/dist/es/standards-sdk.es75.js +3 -3
- package/dist/es/standards-sdk.es76.js +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es83.js +1 -1
- package/dist/es/standards-sdk.es84.js +3 -2
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es90.js +1 -1
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +1 -1
- package/package.json +1 -1
|
@@ -1,262 +1,520 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { createSessionResponseSchema, chatSessionResumeResponseSchema, chatReadinessResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema, chatSessionEndResponseSchema } from "./standards-sdk.es158.js";
|
|
2
|
+
import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.es209.js";
|
|
3
|
+
import { EncryptionUnavailableError } from "./standards-sdk.es201.js";
|
|
4
|
+
function createChatApi(client, encryptedManager) {
|
|
5
|
+
return {
|
|
6
|
+
start: (options) => client.startChat(options),
|
|
7
|
+
readiness: (payload) => client.checkChatReadiness(payload),
|
|
8
|
+
createSession: (payload) => client.createSession(payload),
|
|
9
|
+
resumeSession: (sessionId) => client.resumeSession(sessionId),
|
|
10
|
+
sendMessage: (payload) => client.sendMessage(payload),
|
|
11
|
+
retryMessage: (messageId, payload) => client.retryMessage(messageId, payload),
|
|
12
|
+
cancelSession: (sessionId) => client.cancelSession(sessionId),
|
|
13
|
+
endSession: (sessionId) => client.endSession(sessionId),
|
|
14
|
+
getHistory: (sessionId, options) => client.fetchHistorySnapshot(sessionId, options),
|
|
15
|
+
compactHistory: (payload) => client.compactHistory(payload),
|
|
16
|
+
getEncryptionStatus: (sessionId) => client.fetchEncryptionStatus(sessionId),
|
|
17
|
+
submitEncryptionHandshake: (sessionId, payload) => client.postEncryptionHandshake(sessionId, payload),
|
|
18
|
+
startConversation: (options) => client.startConversation(options),
|
|
19
|
+
acceptConversation: (options) => client.acceptConversation(options),
|
|
20
|
+
createEncryptedSession: (options) => encryptedManager.startSession(options),
|
|
21
|
+
acceptEncryptedSession: (options) => encryptedManager.acceptSession(options)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function checkChatReadiness(client, payload) {
|
|
25
|
+
const body = {};
|
|
26
|
+
const uaid = "uaid" in payload ? payload.uaid?.trim() : void 0;
|
|
27
|
+
const agentUrl = "agentUrl" in payload ? payload.agentUrl?.trim() : void 0;
|
|
28
|
+
if (!uaid && !agentUrl) {
|
|
29
|
+
throw new Error("uaid or agentUrl is required to check chat readiness");
|
|
30
|
+
}
|
|
31
|
+
if (uaid) {
|
|
32
|
+
body.uaid = uaid;
|
|
33
|
+
}
|
|
34
|
+
if (agentUrl) {
|
|
35
|
+
body.agentUrl = agentUrl;
|
|
36
|
+
}
|
|
37
|
+
if (payload.forceRefresh !== void 0) {
|
|
38
|
+
body.forceRefresh = payload.forceRefresh;
|
|
6
39
|
}
|
|
40
|
+
const raw = await client.requestJson("/chat/readiness", {
|
|
41
|
+
method: "POST",
|
|
42
|
+
body,
|
|
43
|
+
headers: { "content-type": "application/json" }
|
|
44
|
+
});
|
|
45
|
+
return client.parseWithSchema(
|
|
46
|
+
raw,
|
|
47
|
+
chatReadinessResponseSchema,
|
|
48
|
+
"chat readiness response"
|
|
49
|
+
);
|
|
7
50
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
51
|
+
async function createSession(client, payload, allowHistoryAutoTopUp = true) {
|
|
52
|
+
const body = {};
|
|
53
|
+
if ("uaid" in payload && payload.uaid) {
|
|
54
|
+
body.uaid = payload.uaid;
|
|
55
|
+
}
|
|
56
|
+
if ("agentUrl" in payload && payload.agentUrl) {
|
|
57
|
+
body.agentUrl = payload.agentUrl;
|
|
58
|
+
}
|
|
59
|
+
if (payload.auth) {
|
|
60
|
+
body.auth = serialiseAuthConfig(payload.auth);
|
|
61
|
+
}
|
|
62
|
+
if (payload.historyTtlSeconds !== void 0) {
|
|
63
|
+
body.historyTtlSeconds = payload.historyTtlSeconds;
|
|
64
|
+
}
|
|
65
|
+
if (payload.encryptionRequested !== void 0) {
|
|
66
|
+
body.encryptionRequested = payload.encryptionRequested;
|
|
67
|
+
}
|
|
68
|
+
if (payload.senderUaid) {
|
|
69
|
+
body.senderUaid = payload.senderUaid;
|
|
70
|
+
}
|
|
71
|
+
if (payload.visibility) {
|
|
72
|
+
body.visibility = payload.visibility;
|
|
73
|
+
}
|
|
74
|
+
if (payload.idempotencyKey) {
|
|
75
|
+
body.idempotencyKey = payload.idempotencyKey;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const raw = await client.requestJson("/chat/session", {
|
|
79
|
+
method: "POST",
|
|
80
|
+
body,
|
|
81
|
+
headers: { "content-type": "application/json" }
|
|
82
|
+
});
|
|
83
|
+
return client.parseWithSchema(
|
|
84
|
+
raw,
|
|
85
|
+
createSessionResponseSchema,
|
|
86
|
+
"chat session response"
|
|
87
|
+
);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
const maybeError = error instanceof Error ? error : null;
|
|
90
|
+
if (allowHistoryAutoTopUp && client.shouldAutoTopUpHistory(payload, maybeError)) {
|
|
91
|
+
await client.executeHistoryAutoTopUp("chat.session");
|
|
92
|
+
return createSession(client, payload, false);
|
|
93
|
+
}
|
|
94
|
+
throw error;
|
|
11
95
|
}
|
|
12
|
-
|
|
13
|
-
|
|
96
|
+
}
|
|
97
|
+
async function resumeSession(client, sessionId) {
|
|
98
|
+
const normalized = sessionId.trim();
|
|
99
|
+
if (!normalized) {
|
|
100
|
+
throw new Error("sessionId is required to resume a chat session");
|
|
14
101
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
102
|
+
const raw = await client.requestJson(
|
|
103
|
+
`/chat/session/${encodeURIComponent(normalized)}/resume`,
|
|
104
|
+
{ method: "GET" }
|
|
105
|
+
);
|
|
106
|
+
return client.parseWithSchema(
|
|
107
|
+
raw,
|
|
108
|
+
chatSessionResumeResponseSchema,
|
|
109
|
+
"chat session resume response"
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
async function startChat(client, encryptedManager, options) {
|
|
113
|
+
if ("uaid" in options && options.uaid) {
|
|
114
|
+
return startConversation(client, encryptedManager, {
|
|
18
115
|
uaid: options.uaid,
|
|
19
116
|
senderUaid: options.senderUaid,
|
|
20
|
-
encryptionRequested: true,
|
|
21
117
|
historyTtlSeconds: options.historyTtlSeconds,
|
|
22
|
-
auth: options.auth
|
|
118
|
+
auth: options.auth,
|
|
119
|
+
encryption: options.encryption,
|
|
120
|
+
onSessionCreated: options.onSessionCreated
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if ("agentUrl" in options && options.agentUrl) {
|
|
124
|
+
const session = await createSession(client, {
|
|
125
|
+
agentUrl: options.agentUrl,
|
|
126
|
+
auth: options.auth,
|
|
127
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
128
|
+
senderUaid: options.senderUaid
|
|
23
129
|
});
|
|
24
130
|
options.onSessionCreated?.(session.sessionId);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
131
|
+
return createPlaintextConversationHandle(
|
|
132
|
+
client,
|
|
133
|
+
session.sessionId,
|
|
134
|
+
session.encryption ?? null,
|
|
135
|
+
options.auth,
|
|
136
|
+
{ agentUrl: options.agentUrl, uaid: options.uaid }
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
throw new Error("startChat requires either uaid or agentUrl");
|
|
140
|
+
}
|
|
141
|
+
async function startConversation(client, encryptedManager, options) {
|
|
142
|
+
const preference = options.encryption?.preference ?? "preferred";
|
|
143
|
+
const requestEncryption = preference !== "disabled";
|
|
144
|
+
if (!requestEncryption) {
|
|
145
|
+
const session = await createSession(client, {
|
|
146
|
+
uaid: options.uaid,
|
|
147
|
+
auth: options.auth,
|
|
148
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
35
149
|
senderUaid: options.senderUaid,
|
|
36
|
-
|
|
37
|
-
|
|
150
|
+
encryptionRequested: false
|
|
151
|
+
});
|
|
152
|
+
options.onSessionCreated?.(session.sessionId);
|
|
153
|
+
return createPlaintextConversationHandle(
|
|
154
|
+
client,
|
|
155
|
+
session.sessionId,
|
|
156
|
+
session.encryption ?? null,
|
|
157
|
+
options.auth,
|
|
158
|
+
{ uaid: options.uaid }
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const handle = await encryptedManager.startSession({
|
|
163
|
+
uaid: options.uaid,
|
|
164
|
+
senderUaid: options.senderUaid,
|
|
165
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
166
|
+
handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,
|
|
167
|
+
pollIntervalMs: options.encryption?.pollIntervalMs,
|
|
168
|
+
onSessionCreated: (sessionId) => {
|
|
169
|
+
options.onSessionCreated?.(sessionId);
|
|
170
|
+
},
|
|
171
|
+
auth: options.auth
|
|
38
172
|
});
|
|
39
173
|
return handle;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
if (error instanceof EncryptionUnavailableError) {
|
|
176
|
+
if (preference === "required") {
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
return createPlaintextConversationHandle(
|
|
180
|
+
client,
|
|
181
|
+
error.sessionId,
|
|
182
|
+
error.summary ?? null,
|
|
183
|
+
options.auth,
|
|
184
|
+
{ uaid: options.uaid }
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
40
188
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const handle = await
|
|
189
|
+
}
|
|
190
|
+
async function acceptConversation(client, encryptedManager, options) {
|
|
191
|
+
const preference = options.encryption?.preference ?? "preferred";
|
|
192
|
+
if (preference === "disabled") {
|
|
193
|
+
return createPlaintextConversationHandle(client, options.sessionId, null);
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
const handle = await encryptedManager.acceptSession({
|
|
49
197
|
sessionId: options.sessionId,
|
|
50
|
-
summary,
|
|
51
198
|
responderUaid: options.responderUaid,
|
|
52
|
-
handshakeTimeoutMs: options.handshakeTimeoutMs,
|
|
53
|
-
pollIntervalMs: options.pollIntervalMs
|
|
199
|
+
handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,
|
|
200
|
+
pollIntervalMs: options.encryption?.pollIntervalMs
|
|
54
201
|
});
|
|
55
202
|
return handle;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const { summary, record } = await this.waitForHandshakeCompletion(
|
|
66
|
-
params.sessionId,
|
|
67
|
-
params.handshakeTimeoutMs,
|
|
68
|
-
params.pollIntervalMs
|
|
69
|
-
);
|
|
70
|
-
const responderKey = record.responder?.ephemeralPublicKey;
|
|
71
|
-
if (!responderKey) {
|
|
72
|
-
throw new Error("Responder handshake was not completed in time");
|
|
203
|
+
} catch (error) {
|
|
204
|
+
if (error instanceof EncryptionUnavailableError && preference !== "required") {
|
|
205
|
+
return createPlaintextConversationHandle(
|
|
206
|
+
client,
|
|
207
|
+
options.sessionId,
|
|
208
|
+
null,
|
|
209
|
+
void 0,
|
|
210
|
+
{ uaid: options.responderUaid }
|
|
211
|
+
);
|
|
73
212
|
}
|
|
74
|
-
|
|
75
|
-
privateKey: keyPair.privateKey,
|
|
76
|
-
peerPublicKey: responderKey
|
|
77
|
-
}).subarray();
|
|
78
|
-
const recipients = this.buildRecipients(summary);
|
|
79
|
-
return this.createHandle({
|
|
80
|
-
sessionId: params.sessionId,
|
|
81
|
-
sharedSecret,
|
|
82
|
-
summary,
|
|
83
|
-
recipients,
|
|
84
|
-
identity: summary.requester ?? void 0
|
|
85
|
-
});
|
|
213
|
+
throw error;
|
|
86
214
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const { summary, record } = await this.waitForHandshakeCompletion(
|
|
96
|
-
params.sessionId,
|
|
97
|
-
params.handshakeTimeoutMs,
|
|
98
|
-
params.pollIntervalMs
|
|
99
|
-
);
|
|
100
|
-
const requesterKey = record.requester?.ephemeralPublicKey;
|
|
101
|
-
if (!requesterKey) {
|
|
102
|
-
throw new Error("Requester handshake was not detected in time");
|
|
215
|
+
}
|
|
216
|
+
function createPlaintextConversationHandle(client, sessionId, summary, defaultAuth, context) {
|
|
217
|
+
const uaid = context?.uaid?.trim();
|
|
218
|
+
const agentUrl = context?.agentUrl?.trim();
|
|
219
|
+
const fetchHistory = async (options) => {
|
|
220
|
+
const snapshot = await client.fetchHistorySnapshot(sessionId, options);
|
|
221
|
+
if (snapshot.decryptedHistory) {
|
|
222
|
+
return snapshot.decryptedHistory;
|
|
103
223
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
async waitForHandshakeCompletion(sessionId, timeoutMs = 3e4, pollIntervalMs = 1e3) {
|
|
118
|
-
const deadline = Date.now() + timeoutMs;
|
|
119
|
-
while (true) {
|
|
120
|
-
const status = await this.client.chat.getEncryptionStatus(sessionId);
|
|
121
|
-
const summary = status.encryption;
|
|
122
|
-
const record = summary?.handshake;
|
|
123
|
-
if (summary && record && record.status === "complete") {
|
|
124
|
-
return { summary, record };
|
|
224
|
+
return snapshot.history.map((entry) => ({
|
|
225
|
+
entry,
|
|
226
|
+
plaintext: entry.content
|
|
227
|
+
}));
|
|
228
|
+
};
|
|
229
|
+
return {
|
|
230
|
+
sessionId,
|
|
231
|
+
mode: "plaintext",
|
|
232
|
+
summary: summary ?? null,
|
|
233
|
+
send: async (options) => {
|
|
234
|
+
const plaintext = options.plaintext;
|
|
235
|
+
if (!plaintext || plaintext.trim().length === 0) {
|
|
236
|
+
throw new Error("plaintext is required for chat messages");
|
|
125
237
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
238
|
+
const message = options.message ?? plaintext;
|
|
239
|
+
return sendMessage(client, {
|
|
240
|
+
sessionId,
|
|
241
|
+
message,
|
|
242
|
+
streaming: options.streaming,
|
|
243
|
+
auth: options.auth ?? defaultAuth,
|
|
244
|
+
uaid,
|
|
245
|
+
agentUrl
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
decryptHistoryEntry: (entry) => entry.content,
|
|
249
|
+
fetchHistory
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
async function compactHistory(client, payload) {
|
|
253
|
+
if (!payload.sessionId || payload.sessionId.trim().length === 0) {
|
|
254
|
+
throw new Error("sessionId is required to compact chat history");
|
|
255
|
+
}
|
|
256
|
+
const body = {};
|
|
257
|
+
if (typeof payload.preserveEntries === "number" && Number.isFinite(payload.preserveEntries) && payload.preserveEntries >= 0) {
|
|
258
|
+
body.preserveEntries = Math.floor(payload.preserveEntries);
|
|
259
|
+
}
|
|
260
|
+
const raw = await client.requestJson(
|
|
261
|
+
`/chat/session/${encodeURIComponent(payload.sessionId)}/compact`,
|
|
262
|
+
{
|
|
263
|
+
method: "POST",
|
|
264
|
+
headers: { "content-type": "application/json" },
|
|
265
|
+
body
|
|
130
266
|
}
|
|
267
|
+
);
|
|
268
|
+
return client.parseWithSchema(
|
|
269
|
+
raw,
|
|
270
|
+
chatHistoryCompactionResponseSchema,
|
|
271
|
+
"chat history compaction response"
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
async function fetchEncryptionStatus(client, sessionId) {
|
|
275
|
+
if (!sessionId || sessionId.trim().length === 0) {
|
|
276
|
+
throw new Error("sessionId is required for encryption status");
|
|
131
277
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
sessionId,
|
|
137
|
-
status.encryption ?? null
|
|
138
|
-
);
|
|
278
|
+
const raw = await client.requestJson(
|
|
279
|
+
`/chat/session/${encodeURIComponent(sessionId)}/encryption`,
|
|
280
|
+
{
|
|
281
|
+
method: "GET"
|
|
139
282
|
}
|
|
140
|
-
|
|
283
|
+
);
|
|
284
|
+
return client.parseWithSchema(
|
|
285
|
+
raw,
|
|
286
|
+
sessionEncryptionStatusResponseSchema,
|
|
287
|
+
"session encryption status response"
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
async function postEncryptionHandshake(client, sessionId, payload) {
|
|
291
|
+
if (!sessionId || sessionId.trim().length === 0) {
|
|
292
|
+
throw new Error("sessionId is required for encryption handshake");
|
|
141
293
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
294
|
+
const raw = await client.requestJson(
|
|
295
|
+
`/chat/session/${encodeURIComponent(sessionId)}/encryption-handshake`,
|
|
296
|
+
{
|
|
297
|
+
method: "POST",
|
|
298
|
+
headers: { "content-type": "application/json" },
|
|
299
|
+
body: {
|
|
300
|
+
role: payload.role,
|
|
301
|
+
keyType: payload.keyType,
|
|
302
|
+
ephemeralPublicKey: payload.ephemeralPublicKey,
|
|
303
|
+
longTermPublicKey: payload.longTermPublicKey,
|
|
304
|
+
signature: payload.signature,
|
|
305
|
+
uaid: payload.uaid,
|
|
306
|
+
userId: payload.userId,
|
|
307
|
+
ledgerAccountId: payload.ledgerAccountId,
|
|
308
|
+
metadata: payload.metadata
|
|
147
309
|
}
|
|
148
|
-
const recipient = {};
|
|
149
|
-
if (candidate.uaid) {
|
|
150
|
-
recipient.uaid = candidate.uaid;
|
|
151
|
-
}
|
|
152
|
-
if (candidate.ledgerAccountId) {
|
|
153
|
-
recipient.ledgerAccountId = candidate.ledgerAccountId;
|
|
154
|
-
}
|
|
155
|
-
if (candidate.userId) {
|
|
156
|
-
recipient.userId = candidate.userId;
|
|
157
|
-
}
|
|
158
|
-
if (candidate.email) {
|
|
159
|
-
recipient.email = candidate.email;
|
|
160
|
-
}
|
|
161
|
-
return recipient;
|
|
162
|
-
}).filter(
|
|
163
|
-
(entry) => Boolean(
|
|
164
|
-
entry?.uaid || entry?.ledgerAccountId || entry?.userId || entry?.email
|
|
165
|
-
)
|
|
166
|
-
);
|
|
167
|
-
if (normalized.length > 0) {
|
|
168
|
-
return normalized;
|
|
169
|
-
}
|
|
170
|
-
if (summary.responder?.uaid) {
|
|
171
|
-
return [{ uaid: summary.responder.uaid }];
|
|
172
310
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
311
|
+
);
|
|
312
|
+
const response = client.parseWithSchema(
|
|
313
|
+
raw,
|
|
314
|
+
encryptionHandshakeResponseSchema,
|
|
315
|
+
"encryption handshake response"
|
|
316
|
+
);
|
|
317
|
+
return response.handshake;
|
|
318
|
+
}
|
|
319
|
+
async function sendMessage(client, payload) {
|
|
320
|
+
const body = {
|
|
321
|
+
message: payload.message
|
|
322
|
+
};
|
|
323
|
+
if (payload.streaming !== void 0) {
|
|
324
|
+
body.streaming = payload.streaming;
|
|
325
|
+
}
|
|
326
|
+
if (payload.idempotencyKey) {
|
|
327
|
+
body.idempotencyKey = payload.idempotencyKey;
|
|
328
|
+
}
|
|
329
|
+
if (payload.senderUaid) {
|
|
330
|
+
body.senderUaid = payload.senderUaid;
|
|
331
|
+
}
|
|
332
|
+
if (payload.transport) {
|
|
333
|
+
body.transport = payload.transport;
|
|
334
|
+
}
|
|
335
|
+
if (payload.auth) {
|
|
336
|
+
body.auth = serialiseAuthConfig(payload.auth);
|
|
337
|
+
}
|
|
338
|
+
if ("uaid" in payload) {
|
|
339
|
+
body.uaid = payload.uaid;
|
|
340
|
+
}
|
|
341
|
+
if ("sessionId" in payload && payload.sessionId) {
|
|
342
|
+
body.sessionId = payload.sessionId;
|
|
343
|
+
}
|
|
344
|
+
if ("agentUrl" in payload && payload.agentUrl) {
|
|
345
|
+
body.agentUrl = payload.agentUrl;
|
|
346
|
+
}
|
|
347
|
+
let cipherEnvelope = payload.cipherEnvelope ?? null;
|
|
348
|
+
if (payload.encryption) {
|
|
349
|
+
const sessionIdForEncryption = payload.encryption.sessionId ?? (typeof body.sessionId === "string" ? body.sessionId : void 0);
|
|
350
|
+
if (!sessionIdForEncryption) {
|
|
351
|
+
throw new Error(
|
|
352
|
+
"sessionId is required when using encrypted chat payloads"
|
|
183
353
|
);
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
354
|
+
}
|
|
355
|
+
if (!payload.encryption.recipients?.length) {
|
|
356
|
+
throw new Error("recipients are required for encrypted chat payloads");
|
|
357
|
+
}
|
|
358
|
+
cipherEnvelope = client.encryption.encryptCipherEnvelope({
|
|
359
|
+
...payload.encryption,
|
|
360
|
+
sessionId: sessionIdForEncryption
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
if (cipherEnvelope) {
|
|
364
|
+
body.cipherEnvelope = toJsonObject(cipherEnvelope);
|
|
365
|
+
}
|
|
366
|
+
const raw = await client.requestJson("/chat/message", {
|
|
367
|
+
method: "POST",
|
|
368
|
+
body,
|
|
369
|
+
headers: { "content-type": "application/json" }
|
|
370
|
+
});
|
|
371
|
+
return client.parseWithSchema(
|
|
372
|
+
raw,
|
|
373
|
+
sendMessageResponseSchema,
|
|
374
|
+
"chat message response"
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
async function endSession(client, sessionId) {
|
|
378
|
+
const normalizedSessionId = sessionId?.trim();
|
|
379
|
+
if (!normalizedSessionId) {
|
|
380
|
+
throw new Error("sessionId is required to end a chat session");
|
|
381
|
+
}
|
|
382
|
+
const response = await client.request(
|
|
383
|
+
`/chat/session/${encodeURIComponent(normalizedSessionId)}`,
|
|
384
|
+
{ method: "DELETE" }
|
|
385
|
+
);
|
|
386
|
+
if (response.status === 204) {
|
|
387
|
+
return {
|
|
388
|
+
message: "Session ended",
|
|
389
|
+
sessionId: normalizedSessionId,
|
|
390
|
+
state: "ended"
|
|
191
391
|
};
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
message: options.message ?? "[ciphertext omitted]",
|
|
201
|
-
streaming: options.streaming,
|
|
202
|
-
auth: options.auth,
|
|
203
|
-
uaid,
|
|
204
|
-
encryption: {
|
|
205
|
-
plaintext: options.plaintext,
|
|
206
|
-
sharedSecret: Buffer.from(sharedSecret),
|
|
207
|
-
recipients
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
},
|
|
211
|
-
decryptHistoryEntry,
|
|
212
|
-
fetchHistory
|
|
392
|
+
}
|
|
393
|
+
const contentType = response.headers?.get("content-type") ?? "";
|
|
394
|
+
if (!contentType.toLowerCase().includes("json")) {
|
|
395
|
+
await response.text();
|
|
396
|
+
return {
|
|
397
|
+
message: "Session ended",
|
|
398
|
+
sessionId: normalizedSessionId,
|
|
399
|
+
state: "ended"
|
|
213
400
|
};
|
|
214
|
-
this.registerConversationContext({
|
|
215
|
-
sessionId: context.sessionId,
|
|
216
|
-
sharedSecret,
|
|
217
|
-
identity: context.identity
|
|
218
|
-
});
|
|
219
|
-
return handle;
|
|
220
401
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return this.client.encryption.decryptCipherEnvelope({
|
|
229
|
-
envelope,
|
|
230
|
-
sharedSecret: secret
|
|
231
|
-
});
|
|
232
|
-
} catch (_error) {
|
|
233
|
-
return null;
|
|
234
|
-
}
|
|
402
|
+
const responseBody = await response.text();
|
|
403
|
+
if (responseBody.trim().length === 0) {
|
|
404
|
+
return {
|
|
405
|
+
message: "Session ended",
|
|
406
|
+
sessionId: normalizedSessionId,
|
|
407
|
+
state: "ended"
|
|
408
|
+
};
|
|
235
409
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
410
|
+
const raw = JSON.parse(responseBody);
|
|
411
|
+
return client.parseWithSchema(
|
|
412
|
+
raw,
|
|
413
|
+
chatSessionEndResponseSchema,
|
|
414
|
+
"chat session end response"
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
async function cancelSession(client, sessionId) {
|
|
418
|
+
const normalizedSessionId = sessionId?.trim();
|
|
419
|
+
if (!normalizedSessionId) {
|
|
420
|
+
throw new Error("sessionId is required to cancel a chat session");
|
|
421
|
+
}
|
|
422
|
+
const raw = await client.requestJson(
|
|
423
|
+
`/chat/session/${encodeURIComponent(normalizedSessionId)}/cancel`,
|
|
424
|
+
{
|
|
425
|
+
method: "POST"
|
|
248
426
|
}
|
|
249
|
-
|
|
427
|
+
);
|
|
428
|
+
return client.parseWithSchema(
|
|
429
|
+
raw,
|
|
430
|
+
chatSessionEndResponseSchema,
|
|
431
|
+
"chat session cancel response"
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
async function retryMessage(client, messageId, payload) {
|
|
435
|
+
const normalizedMessageId = messageId?.trim();
|
|
436
|
+
const normalizedSessionId = payload.sessionId?.trim();
|
|
437
|
+
const normalizedMessage = payload.message?.trim();
|
|
438
|
+
if (!normalizedMessageId) {
|
|
439
|
+
throw new Error("messageId is required to retry a message");
|
|
440
|
+
}
|
|
441
|
+
if (!normalizedSessionId) {
|
|
442
|
+
throw new Error("sessionId is required to retry a message");
|
|
443
|
+
}
|
|
444
|
+
if (!normalizedMessage) {
|
|
445
|
+
throw new Error("message is required to retry a message");
|
|
446
|
+
}
|
|
447
|
+
const body = {
|
|
448
|
+
sessionId: normalizedSessionId,
|
|
449
|
+
message: payload.message
|
|
450
|
+
};
|
|
451
|
+
if (payload.streaming !== void 0) {
|
|
452
|
+
body.streaming = payload.streaming;
|
|
453
|
+
}
|
|
454
|
+
if (payload.transport) {
|
|
455
|
+
body.transport = payload.transport;
|
|
456
|
+
}
|
|
457
|
+
const uaid = payload.uaid?.trim();
|
|
458
|
+
const agentUrl = payload.agentUrl?.trim();
|
|
459
|
+
const idempotencyKey = payload.idempotencyKey?.trim();
|
|
460
|
+
const senderUaid = payload.senderUaid?.trim();
|
|
461
|
+
if (uaid) {
|
|
462
|
+
body.uaid = uaid;
|
|
250
463
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
464
|
+
if (agentUrl) {
|
|
465
|
+
body.agentUrl = agentUrl;
|
|
466
|
+
}
|
|
467
|
+
if (idempotencyKey) {
|
|
468
|
+
body.idempotencyKey = idempotencyKey;
|
|
469
|
+
}
|
|
470
|
+
if (senderUaid) {
|
|
471
|
+
body.senderUaid = senderUaid;
|
|
472
|
+
}
|
|
473
|
+
if (payload.auth) {
|
|
474
|
+
body.auth = serialiseAuthConfig(payload.auth);
|
|
475
|
+
}
|
|
476
|
+
let cipherEnvelope = payload.cipherEnvelope ?? null;
|
|
477
|
+
if (payload.encryption) {
|
|
478
|
+
if (!payload.encryption.recipients?.length) {
|
|
479
|
+
throw new Error("recipients are required for encrypted chat payloads");
|
|
254
480
|
}
|
|
255
|
-
|
|
481
|
+
cipherEnvelope = client.encryption.encryptCipherEnvelope({
|
|
482
|
+
...payload.encryption,
|
|
483
|
+
sessionId: payload.encryption.sessionId ?? normalizedSessionId
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
if (cipherEnvelope) {
|
|
487
|
+
body.cipherEnvelope = toJsonObject(cipherEnvelope);
|
|
256
488
|
}
|
|
489
|
+
const raw = await client.requestJson(
|
|
490
|
+
`/chat/message/${encodeURIComponent(normalizedMessageId)}/retry`,
|
|
491
|
+
{
|
|
492
|
+
method: "POST",
|
|
493
|
+
body,
|
|
494
|
+
headers: { "content-type": "application/json" }
|
|
495
|
+
}
|
|
496
|
+
);
|
|
497
|
+
return client.parseWithSchema(
|
|
498
|
+
raw,
|
|
499
|
+
sendMessageResponseSchema,
|
|
500
|
+
"chat retry response"
|
|
501
|
+
);
|
|
257
502
|
}
|
|
258
503
|
export {
|
|
259
|
-
|
|
260
|
-
|
|
504
|
+
acceptConversation,
|
|
505
|
+
cancelSession,
|
|
506
|
+
checkChatReadiness,
|
|
507
|
+
compactHistory,
|
|
508
|
+
createChatApi,
|
|
509
|
+
createPlaintextConversationHandle,
|
|
510
|
+
createSession,
|
|
511
|
+
endSession,
|
|
512
|
+
fetchEncryptionStatus,
|
|
513
|
+
postEncryptionHandshake,
|
|
514
|
+
resumeSession,
|
|
515
|
+
retryMessage,
|
|
516
|
+
sendMessage,
|
|
517
|
+
startChat,
|
|
518
|
+
startConversation
|
|
261
519
|
};
|
|
262
520
|
//# sourceMappingURL=standards-sdk.es200.js.map
|