@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.
Files changed (192) hide show
  1. package/README.md +3 -0
  2. package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
  3. package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
  5. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  6. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  7. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  8. package/dist/browser/standards-sdk.browser.js +149 -0
  9. package/dist/browser/standards-sdk.browser.js.map +1 -1
  10. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
  11. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
  12. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
  13. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  14. package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
  15. package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
  16. package/dist/browser-root/standards-sdk.root-browser.js +404 -15
  17. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  18. package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
  19. package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
  20. package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
  21. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  22. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  23. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  24. package/dist/cjs/standards-sdk.cjs +2 -2
  25. package/dist/cjs/standards-sdk.cjs.map +1 -1
  26. package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
  27. package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
  28. package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
  29. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  30. package/dist/es/services/registry-broker/client.d.ts +1 -0
  31. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  32. package/dist/es/standards-sdk.es.js +50 -27
  33. package/dist/es/standards-sdk.es.js.map +1 -1
  34. package/dist/es/standards-sdk.es104.js +1 -1
  35. package/dist/es/standards-sdk.es106.js +1 -1
  36. package/dist/es/standards-sdk.es108.js +1 -1
  37. package/dist/es/standards-sdk.es11.js +1 -1
  38. package/dist/es/standards-sdk.es110.js +1 -1
  39. package/dist/es/standards-sdk.es116.js +2 -2
  40. package/dist/es/standards-sdk.es12.js +1 -1
  41. package/dist/es/standards-sdk.es120.js +4 -4
  42. package/dist/es/standards-sdk.es121.js +11 -11
  43. package/dist/es/standards-sdk.es126.js +1 -1
  44. package/dist/es/standards-sdk.es132.js +3 -2
  45. package/dist/es/standards-sdk.es132.js.map +1 -1
  46. package/dist/es/standards-sdk.es147.js +2 -2
  47. package/dist/es/standards-sdk.es148.js +1 -1
  48. package/dist/es/standards-sdk.es150.js +23 -14
  49. package/dist/es/standards-sdk.es150.js.map +1 -1
  50. package/dist/es/standards-sdk.es152.js +372 -248
  51. package/dist/es/standards-sdk.es152.js.map +1 -1
  52. package/dist/es/standards-sdk.es153.js +259 -4
  53. package/dist/es/standards-sdk.es153.js.map +1 -1
  54. package/dist/es/standards-sdk.es154.js +4 -81
  55. package/dist/es/standards-sdk.es154.js.map +1 -1
  56. package/dist/es/standards-sdk.es155.js +71 -77
  57. package/dist/es/standards-sdk.es155.js.map +1 -1
  58. package/dist/es/standards-sdk.es156.js +80 -53
  59. package/dist/es/standards-sdk.es156.js.map +1 -1
  60. package/dist/es/standards-sdk.es157.js +59 -2546
  61. package/dist/es/standards-sdk.es157.js.map +1 -1
  62. package/dist/es/standards-sdk.es158.js +2547 -159
  63. package/dist/es/standards-sdk.es158.js.map +1 -1
  64. package/dist/es/standards-sdk.es159.js +159 -7
  65. package/dist/es/standards-sdk.es159.js.map +1 -1
  66. package/dist/es/standards-sdk.es16.js +3 -2
  67. package/dist/es/standards-sdk.es16.js.map +1 -1
  68. package/dist/es/standards-sdk.es160.js +7 -86
  69. package/dist/es/standards-sdk.es160.js.map +1 -1
  70. package/dist/es/standards-sdk.es161.js +64 -43
  71. package/dist/es/standards-sdk.es161.js.map +1 -1
  72. package/dist/es/standards-sdk.es162.js +57 -186
  73. package/dist/es/standards-sdk.es162.js.map +1 -1
  74. package/dist/es/standards-sdk.es163.js +188 -20
  75. package/dist/es/standards-sdk.es163.js.map +1 -1
  76. package/dist/es/standards-sdk.es164.js +22 -54
  77. package/dist/es/standards-sdk.es164.js.map +1 -1
  78. package/dist/es/standards-sdk.es165.js +41 -78
  79. package/dist/es/standards-sdk.es165.js.map +1 -1
  80. package/dist/es/standards-sdk.es166.js +81 -35
  81. package/dist/es/standards-sdk.es166.js.map +1 -1
  82. package/dist/es/standards-sdk.es167.js +36 -191
  83. package/dist/es/standards-sdk.es167.js.map +1 -1
  84. package/dist/es/standards-sdk.es168.js +191 -43
  85. package/dist/es/standards-sdk.es168.js.map +1 -1
  86. package/dist/es/standards-sdk.es169.js +46 -39
  87. package/dist/es/standards-sdk.es169.js.map +1 -1
  88. package/dist/es/standards-sdk.es170.js +37 -44
  89. package/dist/es/standards-sdk.es170.js.map +1 -1
  90. package/dist/es/standards-sdk.es171.js +46 -39
  91. package/dist/es/standards-sdk.es171.js.map +1 -1
  92. package/dist/es/standards-sdk.es172.js +29 -102
  93. package/dist/es/standards-sdk.es172.js.map +1 -1
  94. package/dist/es/standards-sdk.es173.js +104 -36
  95. package/dist/es/standards-sdk.es173.js.map +1 -1
  96. package/dist/es/standards-sdk.es174.js +43 -33
  97. package/dist/es/standards-sdk.es174.js.map +1 -1
  98. package/dist/es/standards-sdk.es175.js +44 -72
  99. package/dist/es/standards-sdk.es175.js.map +1 -1
  100. package/dist/es/standards-sdk.es176.js +65 -61
  101. package/dist/es/standards-sdk.es176.js.map +1 -1
  102. package/dist/es/standards-sdk.es177.js +63 -39
  103. package/dist/es/standards-sdk.es177.js.map +1 -1
  104. package/dist/es/standards-sdk.es178.js +44 -36
  105. package/dist/es/standards-sdk.es178.js.map +1 -1
  106. package/dist/es/standards-sdk.es179.js +36 -30
  107. package/dist/es/standards-sdk.es179.js.map +1 -1
  108. package/dist/es/standards-sdk.es18.js +6 -5
  109. package/dist/es/standards-sdk.es18.js.map +1 -1
  110. package/dist/es/standards-sdk.es180.js +30 -34
  111. package/dist/es/standards-sdk.es180.js.map +1 -1
  112. package/dist/es/standards-sdk.es181.js +34 -48
  113. package/dist/es/standards-sdk.es181.js.map +1 -1
  114. package/dist/es/standards-sdk.es182.js +48 -138
  115. package/dist/es/standards-sdk.es182.js.map +1 -1
  116. package/dist/es/standards-sdk.es183.js +133 -37
  117. package/dist/es/standards-sdk.es183.js.map +1 -1
  118. package/dist/es/standards-sdk.es184.js +34 -12474
  119. package/dist/es/standards-sdk.es184.js.map +1 -1
  120. package/dist/es/standards-sdk.es185.js +12477 -12
  121. package/dist/es/standards-sdk.es185.js.map +1 -1
  122. package/dist/es/standards-sdk.es186.js +55 -671
  123. package/dist/es/standards-sdk.es186.js.map +1 -1
  124. package/dist/es/standards-sdk.es188.js +71 -63
  125. package/dist/es/standards-sdk.es188.js.map +1 -1
  126. package/dist/es/standards-sdk.es189.js +192 -48
  127. package/dist/es/standards-sdk.es189.js.map +1 -1
  128. package/dist/es/standards-sdk.es19.js +4 -3
  129. package/dist/es/standards-sdk.es19.js.map +1 -1
  130. package/dist/es/standards-sdk.es190.js +15 -79
  131. package/dist/es/standards-sdk.es190.js.map +1 -1
  132. package/dist/es/standards-sdk.es191.js +659 -187
  133. package/dist/es/standards-sdk.es191.js.map +1 -1
  134. package/dist/es/standards-sdk.es198.js +60 -126
  135. package/dist/es/standards-sdk.es198.js.map +1 -1
  136. package/dist/es/standards-sdk.es199.js +104 -482
  137. package/dist/es/standards-sdk.es199.js.map +1 -1
  138. package/dist/es/standards-sdk.es200.js +480 -222
  139. package/dist/es/standards-sdk.es200.js.map +1 -1
  140. package/dist/es/standards-sdk.es201.js +239 -176
  141. package/dist/es/standards-sdk.es201.js.map +1 -1
  142. package/dist/es/standards-sdk.es202.js +178 -101
  143. package/dist/es/standards-sdk.es202.js.map +1 -1
  144. package/dist/es/standards-sdk.es203.js +75 -108
  145. package/dist/es/standards-sdk.es203.js.map +1 -1
  146. package/dist/es/standards-sdk.es204.js +116 -148
  147. package/dist/es/standards-sdk.es204.js.map +1 -1
  148. package/dist/es/standards-sdk.es205.js +146 -646
  149. package/dist/es/standards-sdk.es205.js.map +1 -1
  150. package/dist/es/standards-sdk.es206.js +661 -162
  151. package/dist/es/standards-sdk.es206.js.map +1 -1
  152. package/dist/es/standards-sdk.es207.js +156 -206
  153. package/dist/es/standards-sdk.es207.js.map +1 -1
  154. package/dist/es/standards-sdk.es208.js +219 -223
  155. package/dist/es/standards-sdk.es208.js.map +1 -1
  156. package/dist/es/standards-sdk.es209.js +242 -0
  157. package/dist/es/standards-sdk.es209.js.map +1 -0
  158. package/dist/es/standards-sdk.es22.js +1 -1
  159. package/dist/es/standards-sdk.es27.js +6 -5
  160. package/dist/es/standards-sdk.es27.js.map +1 -1
  161. package/dist/es/standards-sdk.es30.js +1 -1
  162. package/dist/es/standards-sdk.es31.js +1 -1
  163. package/dist/es/standards-sdk.es35.js +4 -3
  164. package/dist/es/standards-sdk.es35.js.map +1 -1
  165. package/dist/es/standards-sdk.es36.js +3 -3
  166. package/dist/es/standards-sdk.es37.js +1 -1
  167. package/dist/es/standards-sdk.es4.js +1 -1
  168. package/dist/es/standards-sdk.es53.js +1 -1
  169. package/dist/es/standards-sdk.es56.js +1 -1
  170. package/dist/es/standards-sdk.es59.js +1 -1
  171. package/dist/es/standards-sdk.es62.js +1 -1
  172. package/dist/es/standards-sdk.es63.js +2 -2
  173. package/dist/es/standards-sdk.es64.js +1 -1
  174. package/dist/es/standards-sdk.es65.js +1 -1
  175. package/dist/es/standards-sdk.es67.js +4 -3
  176. package/dist/es/standards-sdk.es67.js.map +1 -1
  177. package/dist/es/standards-sdk.es7.js +1 -1
  178. package/dist/es/standards-sdk.es71.js +1 -1
  179. package/dist/es/standards-sdk.es72.js +2 -2
  180. package/dist/es/standards-sdk.es75.js +3 -3
  181. package/dist/es/standards-sdk.es76.js +1 -1
  182. package/dist/es/standards-sdk.es78.js +1 -1
  183. package/dist/es/standards-sdk.es83.js +1 -1
  184. package/dist/es/standards-sdk.es84.js +3 -2
  185. package/dist/es/standards-sdk.es84.js.map +1 -1
  186. package/dist/es/standards-sdk.es85.js +1 -1
  187. package/dist/es/standards-sdk.es88.js +1 -1
  188. package/dist/es/standards-sdk.es90.js +1 -1
  189. package/dist/es/standards-sdk.es94.js +3 -3
  190. package/dist/es/standards-sdk.es98.js +1 -1
  191. package/dist/es/standards-sdk.es99.js +1 -1
  192. package/package.json +1 -1
@@ -1,262 +1,520 @@
1
- class EncryptionUnavailableError extends Error {
2
- constructor(sessionId, summary) {
3
- super("Encryption is not enabled for this session");
4
- this.sessionId = sessionId;
5
- this.summary = summary;
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
- class EncryptedChatManager {
9
- constructor(client) {
10
- this.client = client;
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
- registerConversationContext(context) {
13
- this.client.registerConversationContextForEncryption(context);
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
- async startSession(options) {
16
- await this.client.encryptionReady();
17
- const session = await this.client.chat.createSession({
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
- const summary = session.encryption;
26
- if (!summary?.enabled) {
27
- throw new EncryptionUnavailableError(
28
- session.sessionId,
29
- session.encryption ?? null
30
- );
31
- }
32
- const handle = await this.establishRequesterContext({
33
- sessionId: session.sessionId,
34
- summary,
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
- handshakeTimeoutMs: options.handshakeTimeoutMs,
37
- pollIntervalMs: options.pollIntervalMs
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
- async acceptSession(options) {
42
- await this.client.encryptionReady();
43
- const summary = await this.waitForEncryptionSummary(
44
- options.sessionId,
45
- options.handshakeTimeoutMs,
46
- options.pollIntervalMs
47
- );
48
- const handle = await this.establishResponderContext({
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
- async establishRequesterContext(params) {
58
- const keyPair = this.client.encryption.generateEphemeralKeyPair();
59
- await this.client.chat.submitEncryptionHandshake(params.sessionId, {
60
- role: "requester",
61
- keyType: "secp256k1",
62
- ephemeralPublicKey: keyPair.publicKey,
63
- uaid: params.senderUaid ?? params.summary.requester?.uaid ?? void 0
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
- const sharedSecret = this.client.encryption.deriveSharedSecret({
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
- async establishResponderContext(params) {
88
- const keyPair = this.client.encryption.generateEphemeralKeyPair();
89
- await this.client.chat.submitEncryptionHandshake(params.sessionId, {
90
- role: "responder",
91
- keyType: "secp256k1",
92
- ephemeralPublicKey: keyPair.publicKey,
93
- uaid: params.responderUaid ?? params.summary.responder?.uaid ?? void 0
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
- const sharedSecret = this.client.encryption.deriveSharedSecret({
105
- privateKey: keyPair.privateKey,
106
- peerPublicKey: requesterKey
107
- }).subarray();
108
- const recipients = this.buildRecipients(summary);
109
- return this.createHandle({
110
- sessionId: params.sessionId,
111
- sharedSecret,
112
- summary,
113
- recipients,
114
- identity: summary.responder ?? void 0
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
- if (Date.now() >= deadline) {
127
- throw new Error("Timed out waiting for encrypted handshake completion");
128
- }
129
- await this.delay(pollIntervalMs);
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
- async waitForEncryptionSummary(sessionId, _timeoutMs = 3e4, _pollIntervalMs = 1e3) {
133
- const status = await this.client.chat.getEncryptionStatus(sessionId);
134
- if (!status.encryption?.enabled) {
135
- throw new EncryptionUnavailableError(
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
- return status.encryption;
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
- buildRecipients(summary) {
143
- const candidates = [summary.requester, summary.responder].filter(Boolean);
144
- const normalized = candidates.map((candidate) => {
145
- if (!candidate) {
146
- return null;
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
- return [];
174
- }
175
- createHandle(context) {
176
- const sharedSecret = context.sharedSecret;
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
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
- if (snapshot.decryptedHistory) {
185
- return snapshot.decryptedHistory;
186
- }
187
- return snapshot.history.map((entry) => ({
188
- entry,
189
- plaintext: decryptHistoryEntry(entry)
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
- const handle = {
193
- sessionId: context.sessionId,
194
- mode: "encrypted",
195
- summary: context.summary,
196
- send: async (options) => {
197
- const recipients = options.recipients ?? context.recipients;
198
- return this.client.chat.sendMessage({
199
- sessionId: context.sessionId,
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
- decryptEntry(entry, identity, fallbackSecret) {
222
- const envelope = entry.cipherEnvelope;
223
- if (!envelope) {
224
- return null;
225
- }
226
- const secret = Buffer.from(fallbackSecret);
227
- try {
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
- recipientMatches(candidate, target) {
237
- if (target.uaid && candidate.uaid?.toLowerCase() === target.uaid.toLowerCase()) {
238
- return true;
239
- }
240
- if (target.ledgerAccountId && candidate.ledgerAccountId?.toLowerCase() === target.ledgerAccountId.toLowerCase()) {
241
- return true;
242
- }
243
- if (target.userId && candidate.userId === target.userId) {
244
- return true;
245
- }
246
- if (target.email && candidate.email?.toLowerCase() === target.email.toLowerCase()) {
247
- return true;
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
- return false;
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
- async delay(ms) {
252
- if (ms <= 0) {
253
- return;
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
- await new Promise((resolve) => setTimeout(resolve, ms));
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
- EncryptedChatManager,
260
- EncryptionUnavailableError
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