@hashgraphonline/standards-sdk 0.1.147 → 0.1.148
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/cjs/hcs-3/src/types.d.ts +64 -0
- package/dist/cjs/hcs-3/src/types.d.ts.map +1 -0
- package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/adapters.d.ts +15 -18
- package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/agents.d.ts +11 -14
- package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +100 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts +8 -12
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/chat.d.ts +29 -30
- package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/credits.d.ts +14 -18
- package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/encryption.d.ts +32 -30
- package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +5 -8
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/search.d.ts +14 -17
- package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +9 -9
- package/dist/cjs/services/registry-broker/types.d.ts +1 -0
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +3 -3
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-3/src/types.d.ts +64 -0
- package/dist/es/hcs-3/src/types.d.ts.map +1 -0
- package/dist/es/inscribe/inscriber.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/adapters.d.ts +15 -18
- package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/agents.d.ts +11 -14
- package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts +100 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/chat-history.d.ts +8 -12
- package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/chat.d.ts +29 -30
- package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/credits.d.ts +14 -18
- package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/encryption.d.ts +32 -30
- package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts +5 -8
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/search.d.ts +14 -17
- package/dist/es/services/registry-broker/client/search.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +9 -9
- package/dist/es/services/registry-broker/types.d.ts +1 -0
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +13 -16
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +1 -1
- package/dist/es/standards-sdk.es103.js +1 -1
- package/dist/es/standards-sdk.es109.js +3 -10
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +5 -5
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +1 -1
- package/dist/es/standards-sdk.es121.js +1 -1
- package/dist/es/standards-sdk.es122.js +5 -5
- package/dist/es/standards-sdk.es124.js +20 -1
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +1 -1
- package/dist/es/standards-sdk.es127.js +960 -178
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +15 -205
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +79 -96
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es130.js +72 -112
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +760 -213
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +53 -173
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +156 -119
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +8 -327
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +74 -452
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +61 -13
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +30 -81
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +34 -87
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +28 -60
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es140.js +12263 -133
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +138 -7
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +12 -81
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +35 -58
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +172 -30
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +322 -34
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +346 -28
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +427 -112
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +329 -40
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +69 -49
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es150.js +48 -76
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +84 -959
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +169 -14
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +201 -12268
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +223 -156
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +112 -315
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +116 -336
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +151 -443
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +170 -316
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +132 -69
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +3 -10
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +300 -208
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +16 -1
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +6 -13
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +4 -11
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es27.js +6 -13
- 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 +5 -11
- 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.es58.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +4 -11
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +2 -2
- package/dist/es/standards-sdk.es68.js +2 -2
- package/dist/es/standards-sdk.es69.js +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.es76.js +1 -1
- package/dist/es/standards-sdk.es77.js +3 -10
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +1 -1
- package/dist/es/standards-sdk.es83.js +1 -1
- package/dist/es/standards-sdk.es87.js +3 -3
- package/dist/es/standards-sdk.es91.js +1 -1
- package/dist/es/standards-sdk.es92.js +1 -1
- package/dist/es/standards-sdk.es97.js +1 -1
- package/dist/es/standards-sdk.es99.js +1 -1
- package/package.json +2 -1
|
@@ -1,242 +1,334 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
if (Array.isArray(value)) {
|
|
29
|
-
return value.map((item) => item === void 0 ? null : toJsonValue(item));
|
|
30
|
-
}
|
|
31
|
-
if (typeof value === "object") {
|
|
32
|
-
const result = {};
|
|
33
|
-
Object.entries(value).forEach(
|
|
34
|
-
([key, entryValue]) => {
|
|
35
|
-
if (entryValue !== void 0) {
|
|
36
|
-
result[key] = toJsonValue(entryValue);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
return result;
|
|
41
|
-
}
|
|
42
|
-
throw new TypeError("Only JSON-compatible values are supported");
|
|
43
|
-
};
|
|
44
|
-
const isJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
45
|
-
const toJsonObject = (value) => {
|
|
46
|
-
const normalised = toJsonValue(value);
|
|
47
|
-
if (isJsonObject(normalised)) {
|
|
48
|
-
return normalised;
|
|
49
|
-
}
|
|
50
|
-
throw new TypeError("Expected JSON object value");
|
|
51
|
-
};
|
|
52
|
-
const serialiseAuthConfig = (auth) => {
|
|
53
|
-
const authPayload = {};
|
|
54
|
-
if (auth.type) {
|
|
55
|
-
authPayload.type = auth.type;
|
|
56
|
-
}
|
|
57
|
-
if (auth.token) {
|
|
58
|
-
authPayload.token = auth.token;
|
|
59
|
-
}
|
|
60
|
-
if (auth.username) {
|
|
61
|
-
authPayload.username = auth.username;
|
|
62
|
-
}
|
|
63
|
-
if (auth.password) {
|
|
64
|
-
authPayload.password = auth.password;
|
|
65
|
-
}
|
|
66
|
-
if (auth.headerName) {
|
|
67
|
-
authPayload.headerName = auth.headerName;
|
|
1
|
+
import { createSessionResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema } from "./standards-sdk.es127.js";
|
|
2
|
+
import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.es154.js";
|
|
3
|
+
import { EncryptionUnavailableError } from "./standards-sdk.es161.js";
|
|
4
|
+
function createChatApi(client, encryptedManager) {
|
|
5
|
+
return {
|
|
6
|
+
start: (options) => client.startChat(options),
|
|
7
|
+
createSession: (payload) => client.createSession(payload),
|
|
8
|
+
sendMessage: (payload) => client.sendMessage(payload),
|
|
9
|
+
endSession: (sessionId) => client.endSession(sessionId),
|
|
10
|
+
getHistory: (sessionId, options) => client.fetchHistorySnapshot(sessionId, options),
|
|
11
|
+
compactHistory: (payload) => client.compactHistory(payload),
|
|
12
|
+
getEncryptionStatus: (sessionId) => client.fetchEncryptionStatus(sessionId),
|
|
13
|
+
submitEncryptionHandshake: (sessionId, payload) => client.postEncryptionHandshake(sessionId, payload),
|
|
14
|
+
startConversation: (options) => client.startConversation(options),
|
|
15
|
+
acceptConversation: (options) => client.acceptConversation(options),
|
|
16
|
+
createEncryptedSession: (options) => encryptedManager.startSession(options),
|
|
17
|
+
acceptEncryptedSession: (options) => encryptedManager.acceptSession(options)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
async function createSession(client, payload, allowHistoryAutoTopUp = true) {
|
|
21
|
+
const body = {};
|
|
22
|
+
if ("uaid" in payload && payload.uaid) {
|
|
23
|
+
body.uaid = payload.uaid;
|
|
68
24
|
}
|
|
69
|
-
if (
|
|
70
|
-
|
|
25
|
+
if ("agentUrl" in payload && payload.agentUrl) {
|
|
26
|
+
body.agentUrl = payload.agentUrl;
|
|
71
27
|
}
|
|
72
|
-
if (auth
|
|
73
|
-
|
|
28
|
+
if (payload.auth) {
|
|
29
|
+
body.auth = serialiseAuthConfig(payload.auth);
|
|
74
30
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const serialiseAgentRegistrationRequest = (payload) => {
|
|
78
|
-
const body = {
|
|
79
|
-
profile: toJsonObject(payload.profile)
|
|
80
|
-
};
|
|
81
|
-
if (payload.endpoint !== void 0) {
|
|
82
|
-
body.endpoint = payload.endpoint;
|
|
31
|
+
if (payload.historyTtlSeconds !== void 0) {
|
|
32
|
+
body.historyTtlSeconds = payload.historyTtlSeconds;
|
|
83
33
|
}
|
|
84
|
-
if (payload.
|
|
85
|
-
body.
|
|
34
|
+
if (payload.encryptionRequested !== void 0) {
|
|
35
|
+
body.encryptionRequested = payload.encryptionRequested;
|
|
86
36
|
}
|
|
87
|
-
if (payload.
|
|
88
|
-
body.
|
|
37
|
+
if (payload.senderUaid) {
|
|
38
|
+
body.senderUaid = payload.senderUaid;
|
|
89
39
|
}
|
|
90
|
-
|
|
91
|
-
|
|
40
|
+
try {
|
|
41
|
+
const raw = await client.requestJson("/chat/session", {
|
|
42
|
+
method: "POST",
|
|
43
|
+
body,
|
|
44
|
+
headers: { "content-type": "application/json" }
|
|
45
|
+
});
|
|
46
|
+
return client.parseWithSchema(
|
|
47
|
+
raw,
|
|
48
|
+
createSessionResponseSchema,
|
|
49
|
+
"chat session response"
|
|
50
|
+
);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
const maybeError = error instanceof Error ? error : null;
|
|
53
|
+
if (allowHistoryAutoTopUp && client.shouldAutoTopUpHistory(payload, maybeError)) {
|
|
54
|
+
await client.executeHistoryAutoTopUp("chat.session");
|
|
55
|
+
return createSession(client, payload, false);
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
92
58
|
}
|
|
93
|
-
|
|
94
|
-
|
|
59
|
+
}
|
|
60
|
+
async function startChat(client, encryptedManager, options) {
|
|
61
|
+
if ("uaid" in options && options.uaid) {
|
|
62
|
+
return startConversation(client, encryptedManager, {
|
|
63
|
+
uaid: options.uaid,
|
|
64
|
+
senderUaid: options.senderUaid,
|
|
65
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
66
|
+
auth: options.auth,
|
|
67
|
+
encryption: options.encryption,
|
|
68
|
+
onSessionCreated: options.onSessionCreated
|
|
69
|
+
});
|
|
95
70
|
}
|
|
96
|
-
if (
|
|
97
|
-
|
|
71
|
+
if ("agentUrl" in options && options.agentUrl) {
|
|
72
|
+
const session = await createSession(client, {
|
|
73
|
+
agentUrl: options.agentUrl,
|
|
74
|
+
auth: options.auth,
|
|
75
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
76
|
+
senderUaid: options.senderUaid
|
|
77
|
+
});
|
|
78
|
+
options.onSessionCreated?.(session.sessionId);
|
|
79
|
+
return createPlaintextConversationHandle(
|
|
80
|
+
client,
|
|
81
|
+
session.sessionId,
|
|
82
|
+
session.encryption ?? null,
|
|
83
|
+
options.auth,
|
|
84
|
+
{ agentUrl: options.agentUrl, uaid: options.uaid }
|
|
85
|
+
);
|
|
98
86
|
}
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
87
|
+
throw new Error("startChat requires either uaid or agentUrl");
|
|
88
|
+
}
|
|
89
|
+
async function startConversation(client, encryptedManager, options) {
|
|
90
|
+
const preference = options.encryption?.preference ?? "preferred";
|
|
91
|
+
const requestEncryption = preference !== "disabled";
|
|
92
|
+
if (!requestEncryption) {
|
|
93
|
+
const session = await createSession(client, {
|
|
94
|
+
uaid: options.uaid,
|
|
95
|
+
auth: options.auth,
|
|
96
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
97
|
+
senderUaid: options.senderUaid,
|
|
98
|
+
encryptionRequested: false
|
|
99
|
+
});
|
|
100
|
+
options.onSessionCreated?.(session.sessionId);
|
|
101
|
+
return createPlaintextConversationHandle(
|
|
102
|
+
client,
|
|
103
|
+
session.sessionId,
|
|
104
|
+
session.encryption ?? null,
|
|
105
|
+
options.auth,
|
|
106
|
+
{ uaid: options.uaid }
|
|
107
|
+
);
|
|
105
108
|
}
|
|
106
|
-
return trimmed.startsWith("0x") ? trimmed : `0x${trimmed}`;
|
|
107
|
-
};
|
|
108
|
-
function normaliseBaseUrl(input) {
|
|
109
|
-
const trimmed = input?.trim();
|
|
110
|
-
let baseCandidate = trimmed && trimmed.length > 0 ? trimmed : DEFAULT_BASE_URL;
|
|
111
109
|
try {
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
const handle = await encryptedManager.startSession({
|
|
111
|
+
uaid: options.uaid,
|
|
112
|
+
senderUaid: options.senderUaid,
|
|
113
|
+
historyTtlSeconds: options.historyTtlSeconds,
|
|
114
|
+
handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,
|
|
115
|
+
pollIntervalMs: options.encryption?.pollIntervalMs,
|
|
116
|
+
onSessionCreated: (sessionId) => {
|
|
117
|
+
options.onSessionCreated?.(sessionId);
|
|
118
|
+
},
|
|
119
|
+
auth: options.auth
|
|
120
|
+
});
|
|
121
|
+
return handle;
|
|
122
|
+
} catch (error) {
|
|
123
|
+
if (error instanceof EncryptionUnavailableError) {
|
|
124
|
+
if (preference === "required") {
|
|
125
|
+
throw error;
|
|
117
126
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
baseCandidate = url.toString();
|
|
127
|
+
return createPlaintextConversationHandle(
|
|
128
|
+
client,
|
|
129
|
+
error.sessionId,
|
|
130
|
+
error.summary ?? null,
|
|
131
|
+
options.auth,
|
|
132
|
+
{ uaid: options.uaid }
|
|
133
|
+
);
|
|
126
134
|
}
|
|
127
|
-
|
|
135
|
+
throw error;
|
|
128
136
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
}
|
|
138
|
+
async function acceptConversation(client, encryptedManager, options) {
|
|
139
|
+
const preference = options.encryption?.preference ?? "preferred";
|
|
140
|
+
if (preference === "disabled") {
|
|
141
|
+
return createPlaintextConversationHandle(client, options.sessionId, null);
|
|
132
142
|
}
|
|
133
|
-
|
|
134
|
-
|
|
143
|
+
try {
|
|
144
|
+
const handle = await encryptedManager.acceptSession({
|
|
145
|
+
sessionId: options.sessionId,
|
|
146
|
+
responderUaid: options.responderUaid,
|
|
147
|
+
handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,
|
|
148
|
+
pollIntervalMs: options.encryption?.pollIntervalMs
|
|
149
|
+
});
|
|
150
|
+
return handle;
|
|
151
|
+
} catch (error) {
|
|
152
|
+
if (error instanceof EncryptionUnavailableError && preference !== "required") {
|
|
153
|
+
return createPlaintextConversationHandle(
|
|
154
|
+
client,
|
|
155
|
+
options.sessionId,
|
|
156
|
+
null,
|
|
157
|
+
void 0,
|
|
158
|
+
{ uaid: options.responderUaid }
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
135
162
|
}
|
|
136
|
-
return `${withoutTrailing}/api/v1`;
|
|
137
163
|
}
|
|
138
|
-
function
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
164
|
+
function createPlaintextConversationHandle(client, sessionId, summary, defaultAuth, context) {
|
|
165
|
+
const uaid = context?.uaid?.trim();
|
|
166
|
+
const agentUrl = context?.agentUrl?.trim();
|
|
167
|
+
const fetchHistory = async (options) => {
|
|
168
|
+
const snapshot = await client.fetchHistorySnapshot(sessionId, options);
|
|
169
|
+
if (snapshot.decryptedHistory) {
|
|
170
|
+
return snapshot.decryptedHistory;
|
|
143
171
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
172
|
+
return snapshot.history.map((entry) => ({
|
|
173
|
+
entry,
|
|
174
|
+
plaintext: entry.content
|
|
175
|
+
}));
|
|
176
|
+
};
|
|
177
|
+
return {
|
|
178
|
+
sessionId,
|
|
179
|
+
mode: "plaintext",
|
|
180
|
+
summary: summary ?? null,
|
|
181
|
+
send: async (options) => {
|
|
182
|
+
const plaintext = options.plaintext;
|
|
183
|
+
if (!plaintext || plaintext.trim().length === 0) {
|
|
184
|
+
throw new Error("plaintext is required for chat messages");
|
|
150
185
|
}
|
|
151
|
-
|
|
186
|
+
const message = options.message ?? plaintext;
|
|
187
|
+
return sendMessage(client, {
|
|
188
|
+
sessionId,
|
|
189
|
+
message,
|
|
190
|
+
streaming: options.streaming,
|
|
191
|
+
auth: options.auth ?? defaultAuth,
|
|
192
|
+
uaid,
|
|
193
|
+
agentUrl
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
decryptHistoryEntry: (entry) => entry.content,
|
|
197
|
+
fetchHistory
|
|
152
198
|
};
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
199
|
+
}
|
|
200
|
+
async function compactHistory(client, payload) {
|
|
201
|
+
if (!payload.sessionId || payload.sessionId.trim().length === 0) {
|
|
202
|
+
throw new Error("sessionId is required to compact chat history");
|
|
203
|
+
}
|
|
204
|
+
const body = {};
|
|
205
|
+
if (typeof payload.preserveEntries === "number" && Number.isFinite(payload.preserveEntries) && payload.preserveEntries >= 0) {
|
|
206
|
+
body.preserveEntries = Math.floor(payload.preserveEntries);
|
|
207
|
+
}
|
|
208
|
+
const raw = await client.requestJson(
|
|
209
|
+
`/chat/session/${encodeURIComponent(payload.sessionId)}/compact`,
|
|
210
|
+
{
|
|
211
|
+
method: "POST",
|
|
212
|
+
headers: { "content-type": "application/json" },
|
|
213
|
+
body
|
|
157
214
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
215
|
+
);
|
|
216
|
+
return client.parseWithSchema(
|
|
217
|
+
raw,
|
|
218
|
+
chatHistoryCompactionResponseSchema,
|
|
219
|
+
"chat history compaction response"
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
async function fetchEncryptionStatus(client, sessionId) {
|
|
223
|
+
if (!sessionId || sessionId.trim().length === 0) {
|
|
224
|
+
throw new Error("sessionId is required for encryption status");
|
|
225
|
+
}
|
|
226
|
+
const raw = await client.requestJson(
|
|
227
|
+
`/chat/session/${encodeURIComponent(sessionId)}/encryption`,
|
|
228
|
+
{
|
|
229
|
+
method: "GET"
|
|
169
230
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
231
|
+
);
|
|
232
|
+
return client.parseWithSchema(
|
|
233
|
+
raw,
|
|
234
|
+
sessionEncryptionStatusResponseSchema,
|
|
235
|
+
"session encryption status response"
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
async function postEncryptionHandshake(client, sessionId, payload) {
|
|
239
|
+
if (!sessionId || sessionId.trim().length === 0) {
|
|
240
|
+
throw new Error("sessionId is required for encryption handshake");
|
|
241
|
+
}
|
|
242
|
+
const raw = await client.requestJson(
|
|
243
|
+
`/chat/session/${encodeURIComponent(sessionId)}/encryption-handshake`,
|
|
244
|
+
{
|
|
245
|
+
method: "POST",
|
|
246
|
+
headers: { "content-type": "application/json" },
|
|
247
|
+
body: {
|
|
248
|
+
role: payload.role,
|
|
249
|
+
keyType: payload.keyType,
|
|
250
|
+
ephemeralPublicKey: payload.ephemeralPublicKey,
|
|
251
|
+
longTermPublicKey: payload.longTermPublicKey,
|
|
252
|
+
signature: payload.signature,
|
|
253
|
+
uaid: payload.uaid,
|
|
254
|
+
userId: payload.userId,
|
|
255
|
+
ledgerAccountId: payload.ledgerAccountId,
|
|
256
|
+
metadata: payload.metadata
|
|
186
257
|
}
|
|
187
|
-
values.forEach((value) => {
|
|
188
|
-
if (value === void 0 || value === null) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
query.append(`metadata.${trimmedKey}`, String(value));
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
if (params.type) {
|
|
196
|
-
const trimmedType = params.type.trim();
|
|
197
|
-
if (trimmedType.length > 0 && trimmedType.toLowerCase() !== "all") {
|
|
198
|
-
query.set("type", trimmedType);
|
|
199
258
|
}
|
|
259
|
+
);
|
|
260
|
+
const response = client.parseWithSchema(
|
|
261
|
+
raw,
|
|
262
|
+
encryptionHandshakeResponseSchema,
|
|
263
|
+
"encryption handshake response"
|
|
264
|
+
);
|
|
265
|
+
return response.handshake;
|
|
266
|
+
}
|
|
267
|
+
async function sendMessage(client, payload) {
|
|
268
|
+
const body = {
|
|
269
|
+
message: payload.message
|
|
270
|
+
};
|
|
271
|
+
if (payload.streaming !== void 0) {
|
|
272
|
+
body.streaming = payload.streaming;
|
|
200
273
|
}
|
|
201
|
-
if (
|
|
202
|
-
|
|
274
|
+
if (payload.auth) {
|
|
275
|
+
body.auth = serialiseAuthConfig(payload.auth);
|
|
203
276
|
}
|
|
204
|
-
if (
|
|
205
|
-
|
|
277
|
+
if ("uaid" in payload) {
|
|
278
|
+
body.uaid = payload.uaid;
|
|
206
279
|
}
|
|
207
|
-
if (
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
280
|
+
if ("sessionId" in payload && payload.sessionId) {
|
|
281
|
+
body.sessionId = payload.sessionId;
|
|
282
|
+
}
|
|
283
|
+
if ("agentUrl" in payload && payload.agentUrl) {
|
|
284
|
+
body.agentUrl = payload.agentUrl;
|
|
212
285
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
286
|
+
let cipherEnvelope = payload.cipherEnvelope ?? null;
|
|
287
|
+
if (payload.encryption) {
|
|
288
|
+
const sessionIdForEncryption = payload.encryption.sessionId ?? (typeof body.sessionId === "string" ? body.sessionId : void 0);
|
|
289
|
+
if (!sessionIdForEncryption) {
|
|
290
|
+
throw new Error(
|
|
291
|
+
"sessionId is required when using encrypted chat payloads"
|
|
292
|
+
);
|
|
217
293
|
}
|
|
294
|
+
if (!payload.encryption.recipients?.length) {
|
|
295
|
+
throw new Error("recipients are required for encrypted chat payloads");
|
|
296
|
+
}
|
|
297
|
+
cipherEnvelope = client.encryption.encryptCipherEnvelope({
|
|
298
|
+
...payload.encryption,
|
|
299
|
+
sessionId: sessionIdForEncryption
|
|
300
|
+
});
|
|
218
301
|
}
|
|
219
|
-
|
|
220
|
-
|
|
302
|
+
if (cipherEnvelope) {
|
|
303
|
+
body.cipherEnvelope = toJsonObject(cipherEnvelope);
|
|
304
|
+
}
|
|
305
|
+
const raw = await client.requestJson("/chat/message", {
|
|
306
|
+
method: "POST",
|
|
307
|
+
body,
|
|
308
|
+
headers: { "content-type": "application/json" }
|
|
309
|
+
});
|
|
310
|
+
return client.parseWithSchema(
|
|
311
|
+
raw,
|
|
312
|
+
sendMessageResponseSchema,
|
|
313
|
+
"chat message response"
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
async function endSession(client, sessionId) {
|
|
317
|
+
await client.request(`/chat/session/${encodeURIComponent(sessionId)}`, {
|
|
318
|
+
method: "DELETE"
|
|
319
|
+
});
|
|
221
320
|
}
|
|
222
321
|
export {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
normaliseBaseUrl,
|
|
235
|
-
normaliseHeaderName,
|
|
236
|
-
normalizeHexPrivateKey,
|
|
237
|
-
serialiseAgentRegistrationRequest,
|
|
238
|
-
serialiseAuthConfig,
|
|
239
|
-
toJsonObject,
|
|
240
|
-
toJsonValue
|
|
322
|
+
acceptConversation,
|
|
323
|
+
compactHistory,
|
|
324
|
+
createChatApi,
|
|
325
|
+
createPlaintextConversationHandle,
|
|
326
|
+
createSession,
|
|
327
|
+
endSession,
|
|
328
|
+
fetchEncryptionStatus,
|
|
329
|
+
postEncryptionHandshake,
|
|
330
|
+
sendMessage,
|
|
331
|
+
startChat,
|
|
332
|
+
startConversation
|
|
241
333
|
};
|
|
242
334
|
//# sourceMappingURL=standards-sdk.es160.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es160.js","sources":["../../src/services/registry-broker/client/utils.ts"],"sourcesContent":["import type {\n AgentAuthConfig,\n AgentRegistrationRequest,\n JsonObject,\n JsonValue,\n SearchParams,\n} from '../types';\n\nexport const DEFAULT_USER_AGENT = '@hol-org/rb-client';\nexport const DEFAULT_PROGRESS_INTERVAL_MS = 1_500;\nexport const DEFAULT_PROGRESS_TIMEOUT_MS = 5 * 60 * 1_000;\nexport const DEFAULT_BASE_URL = 'https://hol.org/registry/api/v1';\nexport const JSON_CONTENT_TYPE = /application\\/json/i;\nexport const DEFAULT_HISTORY_TOP_UP_HBAR = 0.25;\nexport const MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS = 1;\n\nconst stripTrailingSlashes = (value: string): string => {\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return end === value.length ? value : value.slice(0, end);\n};\n\nexport const createAbortError = (): Error =>\n typeof DOMException === 'function'\n ? new DOMException('Aborted', 'AbortError')\n : new Error('The operation was aborted');\n\nexport const normaliseHeaderName = (name: string): string =>\n name.trim().toLowerCase();\n\nexport const isBrowserRuntime = (): boolean =>\n typeof window !== 'undefined' && typeof window.fetch === 'function';\n\nexport const toJsonValue = (value: unknown): JsonValue => {\n if (value === null) {\n return null;\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(item => (item === undefined ? null : toJsonValue(item)));\n }\n if (typeof value === 'object') {\n const result: JsonObject = {};\n Object.entries(value as Record<string, unknown>).forEach(\n ([key, entryValue]) => {\n if (entryValue !== undefined) {\n result[key] = toJsonValue(entryValue);\n }\n },\n );\n return result;\n }\n throw new TypeError('Only JSON-compatible values are supported');\n};\n\nexport const isJsonObject = (value: JsonValue): value is JsonObject =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const toJsonObject = (value: unknown): JsonObject => {\n const normalised = toJsonValue(value);\n if (isJsonObject(normalised)) {\n return normalised;\n }\n throw new TypeError('Expected JSON object value');\n};\n\nexport const serialiseAuthConfig = (auth: AgentAuthConfig): JsonObject => {\n const authPayload: JsonObject = {};\n if (auth.type) {\n authPayload.type = auth.type;\n }\n if (auth.token) {\n authPayload.token = auth.token;\n }\n if (auth.username) {\n authPayload.username = auth.username;\n }\n if (auth.password) {\n authPayload.password = auth.password;\n }\n if (auth.headerName) {\n authPayload.headerName = auth.headerName;\n }\n if (auth.headerValue) {\n authPayload.headerValue = auth.headerValue;\n }\n if (auth.headers) {\n authPayload.headers = { ...auth.headers };\n }\n return authPayload;\n};\n\nexport const serialiseAgentRegistrationRequest = (\n payload: AgentRegistrationRequest,\n): JsonObject => {\n const body: JsonObject = {\n profile: toJsonObject(payload.profile),\n };\n if (payload.endpoint !== undefined) {\n body.endpoint = payload.endpoint;\n }\n if (payload.protocol !== undefined) {\n body.protocol = payload.protocol;\n }\n if (payload.communicationProtocol !== undefined) {\n body.communicationProtocol = payload.communicationProtocol;\n }\n if (payload.registry !== undefined) {\n body.registry = payload.registry;\n }\n if (payload.additionalRegistries !== undefined) {\n body.additionalRegistries = payload.additionalRegistries;\n }\n if (payload.metadata !== undefined) {\n body.metadata = toJsonObject(payload.metadata);\n }\n return body;\n};\n\nexport type X402NetworkId = 'base' | 'base-sepolia';\n\nexport const normalizeHexPrivateKey = (value: string): `0x${string}` => {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('evmPrivateKey is required');\n }\n return trimmed.startsWith('0x')\n ? (trimmed as `0x${string}`)\n : (`0x${trimmed}` as `0x${string}`);\n};\n\nexport function normaliseBaseUrl(input?: string): string {\n const trimmed = input?.trim();\n let baseCandidate =\n trimmed && trimmed.length > 0 ? trimmed : DEFAULT_BASE_URL;\n\n try {\n const url = new URL(stripTrailingSlashes(baseCandidate));\n const hostname = url.hostname.toLowerCase();\n const ensureRegistryPrefix = (): void => {\n if (!url.pathname.startsWith('/registry')) {\n url.pathname =\n url.pathname === '/' ? '/registry' : `/registry${url.pathname}`;\n }\n };\n\n if (hostname === 'hol.org') {\n ensureRegistryPrefix();\n baseCandidate = url.toString();\n } else if (\n hostname === 'registry.hashgraphonline.com' ||\n hostname === 'hashgraphonline.com'\n ) {\n ensureRegistryPrefix();\n url.hostname = 'hol.org';\n baseCandidate = url.toString();\n }\n } catch {}\n\n const withoutTrailing = stripTrailingSlashes(baseCandidate);\n if (/\\/api\\/v\\d+$/i.test(withoutTrailing)) {\n return withoutTrailing;\n }\n if (/\\/api$/i.test(withoutTrailing)) {\n return `${withoutTrailing}/v1`;\n }\n return `${withoutTrailing}/api/v1`;\n}\n\nexport function buildSearchQuery(params: SearchParams): string {\n const query = new URLSearchParams();\n const appendList = (key: string, values?: string[]) => {\n if (!values) {\n return;\n }\n values.forEach(value => {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.length > 0) {\n query.append(key, trimmed);\n }\n }\n });\n };\n\n if (params.q) {\n const trimmed = params.q.trim();\n if (trimmed.length > 0) {\n query.set('q', trimmed);\n }\n }\n if (typeof params.page === 'number') {\n query.set('page', params.page.toString());\n }\n if (typeof params.limit === 'number') {\n query.set('limit', params.limit.toString());\n }\n if (params.registry) {\n const trimmed = params.registry.trim();\n if (trimmed.length > 0) {\n query.set('registry', trimmed);\n }\n }\n appendList('registries', params.registries);\n if (typeof params.minTrust === 'number') {\n query.set('minTrust', params.minTrust.toString());\n }\n appendList('capabilities', params.capabilities);\n appendList('protocols', params.protocols);\n appendList('adapters', params.adapters);\n\n if (params.metadata) {\n Object.entries(params.metadata).forEach(([key, values]) => {\n if (!key || !Array.isArray(values) || values.length === 0) {\n return;\n }\n const trimmedKey = key.trim();\n if (trimmedKey.length === 0) {\n return;\n }\n values.forEach(value => {\n if (value === undefined || value === null) {\n return;\n }\n query.append(`metadata.${trimmedKey}`, String(value));\n });\n });\n }\n\n if (params.type) {\n const trimmedType = params.type.trim();\n if (trimmedType.length > 0 && trimmedType.toLowerCase() !== 'all') {\n query.set('type', trimmedType);\n }\n }\n\n if (params.verified === true) {\n query.set('verified', 'true');\n }\n\n if (params.online === true) {\n query.set('online', 'true');\n }\n\n if (params.sortBy) {\n const trimmedSort = params.sortBy.trim();\n if (trimmedSort.length > 0) {\n query.set('sortBy', trimmedSort);\n }\n }\n\n if (params.sortOrder) {\n const lowered = params.sortOrder.toLowerCase();\n if (lowered === 'asc' || lowered === 'desc') {\n query.set('sortOrder', lowered);\n }\n }\n const queryString = query.toString();\n return queryString.length > 0 ? `?${queryString}` : '';\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es160.js","sources":["../../src/services/registry-broker/client/chat.ts"],"sourcesContent":["import type {\n AcceptConversationOptions,\n AcceptEncryptedChatSessionOptions,\n AgentAuthConfig,\n ChatConversationHandle,\n DecryptedHistoryEntry,\n ChatHistoryCompactionResponse,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotWithDecryptedEntries,\n CompactHistoryRequestPayload,\n CreateSessionRequestPayload,\n CreateSessionResponse,\n EncryptionHandshakeRecord,\n EncryptionHandshakeSubmissionPayload,\n EncryptedChatSessionHandle,\n JsonObject,\n JsonValue,\n SendMessageRequestPayload,\n SendMessageResponse,\n SessionEncryptionStatusResponse,\n SessionEncryptionSummary,\n StartChatOptions,\n StartConversationOptions,\n StartEncryptedChatSessionOptions,\n} from '../types';\nimport {\n chatHistoryCompactionResponseSchema,\n createSessionResponseSchema,\n encryptionHandshakeResponseSchema,\n sendMessageResponseSchema,\n sessionEncryptionStatusResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { serialiseAuthConfig, toJsonObject } from './utils';\nimport {\n EncryptedChatManager,\n EncryptionUnavailableError,\n} from './encrypted-chat-manager';\n\nexport interface RegistryBrokerChatApi {\n start: (options: StartChatOptions) => Promise<ChatConversationHandle>;\n createSession: (\n payload: CreateSessionRequestPayload,\n ) => Promise<CreateSessionResponse>;\n sendMessage: (\n payload: SendMessageRequestPayload,\n ) => Promise<SendMessageResponse>;\n endSession: (sessionId: string) => Promise<void>;\n getHistory: (\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n ) => Promise<ChatHistorySnapshotWithDecryptedEntries>;\n compactHistory: (\n payload: CompactHistoryRequestPayload,\n ) => Promise<ChatHistoryCompactionResponse>;\n getEncryptionStatus: (\n sessionId: string,\n ) => Promise<SessionEncryptionStatusResponse>;\n submitEncryptionHandshake: (\n sessionId: string,\n payload: EncryptionHandshakeSubmissionPayload,\n ) => Promise<EncryptionHandshakeRecord>;\n createEncryptedSession: (\n options: StartEncryptedChatSessionOptions,\n ) => Promise<EncryptedChatSessionHandle>;\n acceptEncryptedSession: (\n options: AcceptEncryptedChatSessionOptions,\n ) => Promise<EncryptedChatSessionHandle>;\n startConversation: (\n options: StartConversationOptions,\n ) => Promise<ChatConversationHandle>;\n acceptConversation: (\n options: AcceptConversationOptions,\n ) => Promise<ChatConversationHandle>;\n}\n\nexport function createChatApi(\n client: RegistryBrokerClient,\n encryptedManager: EncryptedChatManager,\n): RegistryBrokerChatApi {\n return {\n start: (options: StartChatOptions) => client.startChat(options),\n createSession: (payload: CreateSessionRequestPayload) =>\n client.createSession(payload),\n sendMessage: (payload: SendMessageRequestPayload) =>\n client.sendMessage(payload),\n endSession: (sessionId: string) => client.endSession(sessionId),\n getHistory: (sessionId: string, options?: ChatHistoryFetchOptions) =>\n client.fetchHistorySnapshot(sessionId, options),\n compactHistory: (payload: CompactHistoryRequestPayload) =>\n client.compactHistory(payload),\n getEncryptionStatus: (sessionId: string) =>\n client.fetchEncryptionStatus(sessionId),\n submitEncryptionHandshake: (\n sessionId: string,\n payload: EncryptionHandshakeSubmissionPayload,\n ) => client.postEncryptionHandshake(sessionId, payload),\n startConversation: (options: StartConversationOptions) =>\n client.startConversation(options),\n acceptConversation: (options: AcceptConversationOptions) =>\n client.acceptConversation(options),\n createEncryptedSession: (options: StartEncryptedChatSessionOptions) =>\n encryptedManager.startSession(options),\n acceptEncryptedSession: (options: AcceptEncryptedChatSessionOptions) =>\n encryptedManager.acceptSession(options),\n };\n}\n\nexport async function createSession(\n client: RegistryBrokerClient,\n payload: CreateSessionRequestPayload,\n allowHistoryAutoTopUp = true,\n): Promise<CreateSessionResponse> {\n const body: JsonObject = {};\n if ('uaid' in payload && payload.uaid) {\n body.uaid = payload.uaid;\n }\n if ('agentUrl' in payload && payload.agentUrl) {\n body.agentUrl = payload.agentUrl;\n }\n if (payload.auth) {\n body.auth = serialiseAuthConfig(payload.auth);\n }\n if (payload.historyTtlSeconds !== undefined) {\n body.historyTtlSeconds = payload.historyTtlSeconds;\n }\n if (payload.encryptionRequested !== undefined) {\n body.encryptionRequested = payload.encryptionRequested;\n }\n if (payload.senderUaid) {\n body.senderUaid = payload.senderUaid;\n }\n try {\n const raw = await client.requestJson<JsonValue>('/chat/session', {\n method: 'POST',\n body,\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n createSessionResponseSchema,\n 'chat session response',\n );\n } catch (error) {\n const maybeError = error instanceof Error ? error : null;\n if (\n allowHistoryAutoTopUp &&\n client.shouldAutoTopUpHistory(payload, maybeError)\n ) {\n await client.executeHistoryAutoTopUp('chat.session');\n return createSession(client, payload, false);\n }\n throw error;\n }\n}\n\nexport async function startChat(\n client: RegistryBrokerClient,\n encryptedManager: EncryptedChatManager,\n options: StartChatOptions,\n): Promise<ChatConversationHandle> {\n if ('uaid' in options && options.uaid) {\n return startConversation(client, encryptedManager, {\n uaid: options.uaid,\n senderUaid: options.senderUaid,\n historyTtlSeconds: options.historyTtlSeconds,\n auth: options.auth,\n encryption: options.encryption,\n onSessionCreated: options.onSessionCreated,\n });\n }\n if ('agentUrl' in options && options.agentUrl) {\n const session = await createSession(client, {\n agentUrl: options.agentUrl,\n auth: options.auth,\n historyTtlSeconds: options.historyTtlSeconds,\n senderUaid: options.senderUaid,\n });\n options.onSessionCreated?.(session.sessionId);\n return createPlaintextConversationHandle(\n client,\n session.sessionId,\n session.encryption ?? null,\n options.auth,\n { agentUrl: options.agentUrl, uaid: options.uaid },\n );\n }\n throw new Error('startChat requires either uaid or agentUrl');\n}\n\nexport async function startConversation(\n client: RegistryBrokerClient,\n encryptedManager: EncryptedChatManager,\n options: StartConversationOptions,\n): Promise<ChatConversationHandle> {\n const preference = options.encryption?.preference ?? 'preferred';\n const requestEncryption = preference !== 'disabled';\n if (!requestEncryption) {\n const session = await createSession(client, {\n uaid: options.uaid,\n auth: options.auth,\n historyTtlSeconds: options.historyTtlSeconds,\n senderUaid: options.senderUaid,\n encryptionRequested: false,\n });\n options.onSessionCreated?.(session.sessionId);\n return createPlaintextConversationHandle(\n client,\n session.sessionId,\n session.encryption ?? null,\n options.auth,\n { uaid: options.uaid },\n );\n }\n try {\n const handle = await encryptedManager.startSession({\n uaid: options.uaid,\n senderUaid: options.senderUaid,\n historyTtlSeconds: options.historyTtlSeconds,\n handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,\n pollIntervalMs: options.encryption?.pollIntervalMs,\n onSessionCreated: sessionId => {\n options.onSessionCreated?.(sessionId);\n },\n auth: options.auth,\n });\n return handle;\n } catch (error) {\n if (error instanceof EncryptionUnavailableError) {\n if (preference === 'required') {\n throw error;\n }\n return createPlaintextConversationHandle(\n client,\n error.sessionId,\n error.summary ?? null,\n options.auth,\n { uaid: options.uaid },\n );\n }\n throw error;\n }\n}\n\nexport async function acceptConversation(\n client: RegistryBrokerClient,\n encryptedManager: EncryptedChatManager,\n options: AcceptConversationOptions,\n): Promise<ChatConversationHandle> {\n const preference = options.encryption?.preference ?? 'preferred';\n if (preference === 'disabled') {\n return createPlaintextConversationHandle(client, options.sessionId, null);\n }\n try {\n const handle = await encryptedManager.acceptSession({\n sessionId: options.sessionId,\n responderUaid: options.responderUaid,\n handshakeTimeoutMs: options.encryption?.handshakeTimeoutMs,\n pollIntervalMs: options.encryption?.pollIntervalMs,\n });\n return handle;\n } catch (error) {\n if (\n error instanceof EncryptionUnavailableError &&\n preference !== 'required'\n ) {\n return createPlaintextConversationHandle(\n client,\n options.sessionId,\n null,\n undefined,\n { uaid: options.responderUaid },\n );\n }\n throw error;\n }\n}\n\nexport function createPlaintextConversationHandle(\n client: RegistryBrokerClient,\n sessionId: string,\n summary: SessionEncryptionSummary | null,\n defaultAuth?: AgentAuthConfig,\n context?: { uaid?: string; agentUrl?: string },\n): ChatConversationHandle {\n const uaid = context?.uaid?.trim();\n const agentUrl = context?.agentUrl?.trim();\n const fetchHistory = async (\n options?: ChatHistoryFetchOptions,\n ): Promise<DecryptedHistoryEntry[]> => {\n const snapshot = await client.fetchHistorySnapshot(sessionId, options);\n if (snapshot.decryptedHistory) {\n return snapshot.decryptedHistory;\n }\n return snapshot.history.map(entry => ({\n entry,\n plaintext: entry.content,\n }));\n };\n return {\n sessionId,\n mode: 'plaintext',\n summary: summary ?? null,\n send: async options => {\n const plaintext = options.plaintext;\n if (!plaintext || plaintext.trim().length === 0) {\n throw new Error('plaintext is required for chat messages');\n }\n const message = options.message ?? plaintext;\n return sendMessage(client, {\n sessionId,\n message,\n streaming: options.streaming,\n auth: options.auth ?? defaultAuth,\n uaid,\n agentUrl,\n });\n },\n decryptHistoryEntry: entry => entry.content,\n fetchHistory,\n };\n}\n\nexport async function compactHistory(\n client: RegistryBrokerClient,\n payload: CompactHistoryRequestPayload,\n): Promise<ChatHistoryCompactionResponse> {\n if (!payload.sessionId || payload.sessionId.trim().length === 0) {\n throw new Error('sessionId is required to compact chat history');\n }\n const body: JsonObject = {};\n if (\n typeof payload.preserveEntries === 'number' &&\n Number.isFinite(payload.preserveEntries) &&\n payload.preserveEntries >= 0\n ) {\n body.preserveEntries = Math.floor(payload.preserveEntries);\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(payload.sessionId)}/compact`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n },\n );\n return client.parseWithSchema(\n raw,\n chatHistoryCompactionResponseSchema,\n 'chat history compaction response',\n );\n}\n\nexport async function fetchEncryptionStatus(\n client: RegistryBrokerClient,\n sessionId: string,\n): Promise<SessionEncryptionStatusResponse> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required for encryption status');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/encryption`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n sessionEncryptionStatusResponseSchema,\n 'session encryption status response',\n );\n}\n\nexport async function postEncryptionHandshake(\n client: RegistryBrokerClient,\n sessionId: string,\n payload: EncryptionHandshakeSubmissionPayload,\n): Promise<EncryptionHandshakeRecord> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required for encryption handshake');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/encryption-handshake`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: {\n role: payload.role,\n keyType: payload.keyType,\n ephemeralPublicKey: payload.ephemeralPublicKey,\n longTermPublicKey: payload.longTermPublicKey,\n signature: payload.signature,\n uaid: payload.uaid,\n userId: payload.userId,\n ledgerAccountId: payload.ledgerAccountId,\n metadata: payload.metadata,\n },\n },\n );\n const response = client.parseWithSchema(\n raw,\n encryptionHandshakeResponseSchema,\n 'encryption handshake response',\n );\n return response.handshake;\n}\n\nexport async function sendMessage(\n client: RegistryBrokerClient,\n payload: SendMessageRequestPayload,\n): Promise<SendMessageResponse> {\n const body: JsonObject = {\n message: payload.message,\n };\n if (payload.streaming !== undefined) {\n body.streaming = payload.streaming;\n }\n if (payload.auth) {\n body.auth = serialiseAuthConfig(payload.auth);\n }\n if ('uaid' in payload) {\n body.uaid = payload.uaid;\n }\n if ('sessionId' in payload && payload.sessionId) {\n body.sessionId = payload.sessionId;\n }\n if ('agentUrl' in payload && payload.agentUrl) {\n body.agentUrl = payload.agentUrl;\n }\n let cipherEnvelope = payload.cipherEnvelope ?? null;\n if (payload.encryption) {\n const sessionIdForEncryption =\n payload.encryption.sessionId ??\n (typeof body.sessionId === 'string' ? body.sessionId : undefined);\n if (!sessionIdForEncryption) {\n throw new Error(\n 'sessionId is required when using encrypted chat payloads',\n );\n }\n if (!payload.encryption.recipients?.length) {\n throw new Error('recipients are required for encrypted chat payloads');\n }\n cipherEnvelope = client.encryption.encryptCipherEnvelope({\n ...payload.encryption,\n sessionId: sessionIdForEncryption,\n });\n }\n if (cipherEnvelope) {\n body.cipherEnvelope = toJsonObject(cipherEnvelope);\n }\n const raw = await client.requestJson<JsonValue>('/chat/message', {\n method: 'POST',\n body,\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n sendMessageResponseSchema,\n 'chat message response',\n );\n}\n\nexport async function endSession(\n client: RegistryBrokerClient,\n sessionId: string,\n): Promise<void> {\n await client.request(`/chat/session/${encodeURIComponent(sessionId)}`, {\n method: 'DELETE',\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -175,6 +175,20 @@ class EncryptedChatManager {
|
|
|
175
175
|
createHandle(context) {
|
|
176
176
|
const sharedSecret = context.sharedSecret;
|
|
177
177
|
const uaid = context.summary.requester?.uaid ?? context.summary.responder?.uaid ?? context.identity?.uaid;
|
|
178
|
+
const decryptHistoryEntry = (entry) => this.decryptEntry(entry, context.identity, sharedSecret);
|
|
179
|
+
const fetchHistory = async (options) => {
|
|
180
|
+
const snapshot = await this.client.fetchHistorySnapshot(
|
|
181
|
+
context.sessionId,
|
|
182
|
+
options
|
|
183
|
+
);
|
|
184
|
+
if (snapshot.decryptedHistory) {
|
|
185
|
+
return snapshot.decryptedHistory;
|
|
186
|
+
}
|
|
187
|
+
return snapshot.history.map((entry) => ({
|
|
188
|
+
entry,
|
|
189
|
+
plaintext: decryptHistoryEntry(entry)
|
|
190
|
+
}));
|
|
191
|
+
};
|
|
178
192
|
const handle = {
|
|
179
193
|
sessionId: context.sessionId,
|
|
180
194
|
mode: "encrypted",
|
|
@@ -194,7 +208,8 @@ class EncryptedChatManager {
|
|
|
194
208
|
}
|
|
195
209
|
});
|
|
196
210
|
},
|
|
197
|
-
decryptHistoryEntry
|
|
211
|
+
decryptHistoryEntry,
|
|
212
|
+
fetchHistory
|
|
198
213
|
};
|
|
199
214
|
this.registerConversationContext({
|
|
200
215
|
sessionId: context.sessionId,
|