@hashgraphonline/standards-sdk 0.1.187 → 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 (212) hide show
  1. package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
  2. package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
  3. package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  5. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  6. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  7. package/dist/browser/standards-sdk.browser.js +149 -0
  8. package/dist/browser/standards-sdk.browser.js.map +1 -1
  9. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
  10. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
  11. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
  12. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  13. package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
  14. package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
  15. package/dist/browser-root/standards-sdk.root-browser.js +404 -15
  16. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  17. package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
  18. package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
  19. package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
  20. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  22. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  23. package/dist/cjs/standards-sdk.cjs +2 -2
  24. package/dist/cjs/standards-sdk.cjs.map +1 -1
  25. package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
  26. package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
  27. package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
  28. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/es/services/registry-broker/client.d.ts +1 -0
  30. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  31. package/dist/es/standards-sdk.es.js +50 -27
  32. package/dist/es/standards-sdk.es.js.map +1 -1
  33. package/dist/es/standards-sdk.es104.js +1 -1
  34. package/dist/es/standards-sdk.es106.js +1 -1
  35. package/dist/es/standards-sdk.es108.js +1 -1
  36. package/dist/es/standards-sdk.es11.js +1 -1
  37. package/dist/es/standards-sdk.es110.js +1 -1
  38. package/dist/es/standards-sdk.es116.js +2 -2
  39. package/dist/es/standards-sdk.es12.js +1 -1
  40. package/dist/es/standards-sdk.es120.js +4 -4
  41. package/dist/es/standards-sdk.es121.js +11 -11
  42. package/dist/es/standards-sdk.es126.js +1 -1
  43. package/dist/es/standards-sdk.es132.js +3 -2
  44. package/dist/es/standards-sdk.es132.js.map +1 -1
  45. package/dist/es/standards-sdk.es133.js +5 -5
  46. package/dist/es/standards-sdk.es143.js +1 -1
  47. package/dist/es/standards-sdk.es144.js +1 -1
  48. package/dist/es/standards-sdk.es145.js +5 -5
  49. package/dist/es/standards-sdk.es147.js +3 -3
  50. package/dist/es/standards-sdk.es148.js +1 -1
  51. package/dist/es/standards-sdk.es150.js +24 -15
  52. package/dist/es/standards-sdk.es150.js.map +1 -1
  53. package/dist/es/standards-sdk.es152.js +372 -248
  54. package/dist/es/standards-sdk.es152.js.map +1 -1
  55. package/dist/es/standards-sdk.es153.js +259 -4
  56. package/dist/es/standards-sdk.es153.js.map +1 -1
  57. package/dist/es/standards-sdk.es154.js +4 -81
  58. package/dist/es/standards-sdk.es154.js.map +1 -1
  59. package/dist/es/standards-sdk.es155.js +71 -77
  60. package/dist/es/standards-sdk.es155.js.map +1 -1
  61. package/dist/es/standards-sdk.es156.js +80 -53
  62. package/dist/es/standards-sdk.es156.js.map +1 -1
  63. package/dist/es/standards-sdk.es157.js +59 -2546
  64. package/dist/es/standards-sdk.es157.js.map +1 -1
  65. package/dist/es/standards-sdk.es158.js +2547 -159
  66. package/dist/es/standards-sdk.es158.js.map +1 -1
  67. package/dist/es/standards-sdk.es159.js +159 -7
  68. package/dist/es/standards-sdk.es159.js.map +1 -1
  69. package/dist/es/standards-sdk.es16.js +3 -2
  70. package/dist/es/standards-sdk.es16.js.map +1 -1
  71. package/dist/es/standards-sdk.es160.js +7 -86
  72. package/dist/es/standards-sdk.es160.js.map +1 -1
  73. package/dist/es/standards-sdk.es161.js +64 -43
  74. package/dist/es/standards-sdk.es161.js.map +1 -1
  75. package/dist/es/standards-sdk.es162.js +57 -186
  76. package/dist/es/standards-sdk.es162.js.map +1 -1
  77. package/dist/es/standards-sdk.es163.js +188 -20
  78. package/dist/es/standards-sdk.es163.js.map +1 -1
  79. package/dist/es/standards-sdk.es164.js +22 -54
  80. package/dist/es/standards-sdk.es164.js.map +1 -1
  81. package/dist/es/standards-sdk.es165.js +41 -78
  82. package/dist/es/standards-sdk.es165.js.map +1 -1
  83. package/dist/es/standards-sdk.es166.js +81 -35
  84. package/dist/es/standards-sdk.es166.js.map +1 -1
  85. package/dist/es/standards-sdk.es167.js +36 -191
  86. package/dist/es/standards-sdk.es167.js.map +1 -1
  87. package/dist/es/standards-sdk.es168.js +191 -43
  88. package/dist/es/standards-sdk.es168.js.map +1 -1
  89. package/dist/es/standards-sdk.es169.js +46 -39
  90. package/dist/es/standards-sdk.es169.js.map +1 -1
  91. package/dist/es/standards-sdk.es170.js +37 -44
  92. package/dist/es/standards-sdk.es170.js.map +1 -1
  93. package/dist/es/standards-sdk.es171.js +46 -39
  94. package/dist/es/standards-sdk.es171.js.map +1 -1
  95. package/dist/es/standards-sdk.es172.js +29 -102
  96. package/dist/es/standards-sdk.es172.js.map +1 -1
  97. package/dist/es/standards-sdk.es173.js +104 -36
  98. package/dist/es/standards-sdk.es173.js.map +1 -1
  99. package/dist/es/standards-sdk.es174.js +43 -33
  100. package/dist/es/standards-sdk.es174.js.map +1 -1
  101. package/dist/es/standards-sdk.es175.js +44 -72
  102. package/dist/es/standards-sdk.es175.js.map +1 -1
  103. package/dist/es/standards-sdk.es176.js +65 -61
  104. package/dist/es/standards-sdk.es176.js.map +1 -1
  105. package/dist/es/standards-sdk.es177.js +63 -39
  106. package/dist/es/standards-sdk.es177.js.map +1 -1
  107. package/dist/es/standards-sdk.es178.js +44 -36
  108. package/dist/es/standards-sdk.es178.js.map +1 -1
  109. package/dist/es/standards-sdk.es179.js +36 -30
  110. package/dist/es/standards-sdk.es179.js.map +1 -1
  111. package/dist/es/standards-sdk.es18.js +6 -5
  112. package/dist/es/standards-sdk.es18.js.map +1 -1
  113. package/dist/es/standards-sdk.es180.js +30 -34
  114. package/dist/es/standards-sdk.es180.js.map +1 -1
  115. package/dist/es/standards-sdk.es181.js +34 -48
  116. package/dist/es/standards-sdk.es181.js.map +1 -1
  117. package/dist/es/standards-sdk.es182.js +48 -138
  118. package/dist/es/standards-sdk.es182.js.map +1 -1
  119. package/dist/es/standards-sdk.es183.js +133 -37
  120. package/dist/es/standards-sdk.es183.js.map +1 -1
  121. package/dist/es/standards-sdk.es184.js +34 -12474
  122. package/dist/es/standards-sdk.es184.js.map +1 -1
  123. package/dist/es/standards-sdk.es185.js +12425 -615
  124. package/dist/es/standards-sdk.es185.js.map +1 -1
  125. package/dist/es/standards-sdk.es186.js +47 -102
  126. package/dist/es/standards-sdk.es186.js.map +1 -1
  127. package/dist/es/standards-sdk.es187.js +96 -58
  128. package/dist/es/standards-sdk.es187.js.map +1 -1
  129. package/dist/es/standards-sdk.es188.js +73 -48
  130. package/dist/es/standards-sdk.es188.js.map +1 -1
  131. package/dist/es/standards-sdk.es189.js +180 -61
  132. package/dist/es/standards-sdk.es189.js.map +1 -1
  133. package/dist/es/standards-sdk.es19.js +4 -3
  134. package/dist/es/standards-sdk.es19.js.map +1 -1
  135. package/dist/es/standards-sdk.es190.js +14 -197
  136. package/dist/es/standards-sdk.es190.js.map +1 -1
  137. package/dist/es/standards-sdk.es191.js +658 -158
  138. package/dist/es/standards-sdk.es191.js.map +1 -1
  139. package/dist/es/standards-sdk.es192.js +139 -289
  140. package/dist/es/standards-sdk.es192.js.map +1 -1
  141. package/dist/es/standards-sdk.es193.js +274 -298
  142. package/dist/es/standards-sdk.es193.js.map +1 -1
  143. package/dist/es/standards-sdk.es194.js +262 -369
  144. package/dist/es/standards-sdk.es194.js.map +1 -1
  145. package/dist/es/standards-sdk.es195.js +316 -194
  146. package/dist/es/standards-sdk.es195.js.map +1 -1
  147. package/dist/es/standards-sdk.es196.js +319 -64
  148. package/dist/es/standards-sdk.es196.js.map +1 -1
  149. package/dist/es/standards-sdk.es197.js +74 -15
  150. package/dist/es/standards-sdk.es197.js.map +1 -1
  151. package/dist/es/standards-sdk.es198.js +60 -126
  152. package/dist/es/standards-sdk.es198.js.map +1 -1
  153. package/dist/es/standards-sdk.es199.js +104 -482
  154. package/dist/es/standards-sdk.es199.js.map +1 -1
  155. package/dist/es/standards-sdk.es200.js +480 -222
  156. package/dist/es/standards-sdk.es200.js.map +1 -1
  157. package/dist/es/standards-sdk.es201.js +239 -176
  158. package/dist/es/standards-sdk.es201.js.map +1 -1
  159. package/dist/es/standards-sdk.es202.js +178 -101
  160. package/dist/es/standards-sdk.es202.js.map +1 -1
  161. package/dist/es/standards-sdk.es203.js +75 -108
  162. package/dist/es/standards-sdk.es203.js.map +1 -1
  163. package/dist/es/standards-sdk.es204.js +116 -148
  164. package/dist/es/standards-sdk.es204.js.map +1 -1
  165. package/dist/es/standards-sdk.es205.js +146 -646
  166. package/dist/es/standards-sdk.es205.js.map +1 -1
  167. package/dist/es/standards-sdk.es206.js +661 -162
  168. package/dist/es/standards-sdk.es206.js.map +1 -1
  169. package/dist/es/standards-sdk.es207.js +156 -206
  170. package/dist/es/standards-sdk.es207.js.map +1 -1
  171. package/dist/es/standards-sdk.es208.js +219 -223
  172. package/dist/es/standards-sdk.es208.js.map +1 -1
  173. package/dist/es/standards-sdk.es209.js +242 -0
  174. package/dist/es/standards-sdk.es209.js.map +1 -0
  175. package/dist/es/standards-sdk.es22.js +1 -1
  176. package/dist/es/standards-sdk.es27.js +6 -5
  177. package/dist/es/standards-sdk.es27.js.map +1 -1
  178. package/dist/es/standards-sdk.es30.js +1 -1
  179. package/dist/es/standards-sdk.es31.js +1 -1
  180. package/dist/es/standards-sdk.es35.js +4 -3
  181. package/dist/es/standards-sdk.es35.js.map +1 -1
  182. package/dist/es/standards-sdk.es36.js +3 -3
  183. package/dist/es/standards-sdk.es37.js +1 -1
  184. package/dist/es/standards-sdk.es4.js +1 -1
  185. package/dist/es/standards-sdk.es53.js +1 -1
  186. package/dist/es/standards-sdk.es56.js +1 -1
  187. package/dist/es/standards-sdk.es59.js +1 -1
  188. package/dist/es/standards-sdk.es60.js +1 -1
  189. package/dist/es/standards-sdk.es62.js +1 -1
  190. package/dist/es/standards-sdk.es63.js +2 -2
  191. package/dist/es/standards-sdk.es64.js +1 -1
  192. package/dist/es/standards-sdk.es65.js +1 -1
  193. package/dist/es/standards-sdk.es66.js +1 -1
  194. package/dist/es/standards-sdk.es67.js +4 -3
  195. package/dist/es/standards-sdk.es67.js.map +1 -1
  196. package/dist/es/standards-sdk.es69.js +1 -1
  197. package/dist/es/standards-sdk.es7.js +1 -1
  198. package/dist/es/standards-sdk.es71.js +1 -1
  199. package/dist/es/standards-sdk.es72.js +2 -2
  200. package/dist/es/standards-sdk.es75.js +3 -3
  201. package/dist/es/standards-sdk.es76.js +1 -1
  202. package/dist/es/standards-sdk.es78.js +1 -1
  203. package/dist/es/standards-sdk.es83.js +1 -1
  204. package/dist/es/standards-sdk.es84.js +3 -2
  205. package/dist/es/standards-sdk.es84.js.map +1 -1
  206. package/dist/es/standards-sdk.es85.js +1 -1
  207. package/dist/es/standards-sdk.es88.js +1 -1
  208. package/dist/es/standards-sdk.es90.js +1 -1
  209. package/dist/es/standards-sdk.es94.js +3 -3
  210. package/dist/es/standards-sdk.es98.js +1 -1
  211. package/dist/es/standards-sdk.es99.js +1 -1
  212. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es199.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 ChatReadinessRequestPayload,\n ChatReadinessResponse,\n ChatRetryRequestPayload,\n ChatRetryResponse,\n ChatSessionEndResponse,\n ChatSessionResumeResponse,\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 chatReadinessResponseSchema,\n chatSessionEndResponseSchema,\n chatSessionResumeResponseSchema,\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 readiness: (\n payload: ChatReadinessRequestPayload,\n ) => Promise<ChatReadinessResponse>;\n createSession: (\n payload: CreateSessionRequestPayload,\n ) => Promise<CreateSessionResponse>;\n resumeSession: (sessionId: string) => Promise<ChatSessionResumeResponse>;\n sendMessage: (\n payload: SendMessageRequestPayload,\n ) => Promise<SendMessageResponse>;\n retryMessage: (\n messageId: string,\n payload: ChatRetryRequestPayload,\n ) => Promise<ChatRetryResponse>;\n cancelSession: (sessionId: string) => Promise<ChatSessionEndResponse>;\n endSession: (sessionId: string) => Promise<ChatSessionEndResponse>;\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 readiness: (payload: ChatReadinessRequestPayload) =>\n client.checkChatReadiness(payload),\n createSession: (payload: CreateSessionRequestPayload) =>\n client.createSession(payload),\n resumeSession: (sessionId: string) => client.resumeSession(sessionId),\n sendMessage: (payload: SendMessageRequestPayload) =>\n client.sendMessage(payload),\n retryMessage: (messageId: string, payload: ChatRetryRequestPayload) =>\n client.retryMessage(messageId, payload),\n cancelSession: (sessionId: string) => client.cancelSession(sessionId),\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 checkChatReadiness(\n client: RegistryBrokerClient,\n payload: ChatReadinessRequestPayload,\n): Promise<ChatReadinessResponse> {\n const body: JsonObject = {};\n const uaid = 'uaid' in payload ? payload.uaid?.trim() : undefined;\n const agentUrl = 'agentUrl' in payload ? payload.agentUrl?.trim() : undefined;\n if (!uaid && !agentUrl) {\n throw new Error('uaid or agentUrl is required to check chat readiness');\n }\n if (uaid) {\n body.uaid = uaid;\n }\n if (agentUrl) {\n body.agentUrl = agentUrl;\n }\n if (payload.forceRefresh !== undefined) {\n body.forceRefresh = payload.forceRefresh;\n }\n const raw = await client.requestJson<JsonValue>('/chat/readiness', {\n method: 'POST',\n body,\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n chatReadinessResponseSchema,\n 'chat readiness response',\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 if (payload.visibility) {\n body.visibility = payload.visibility;\n }\n if (payload.idempotencyKey) {\n body.idempotencyKey = payload.idempotencyKey;\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 resumeSession(\n client: RegistryBrokerClient,\n sessionId: string,\n): Promise<ChatSessionResumeResponse> {\n const normalized = sessionId.trim();\n if (!normalized) {\n throw new Error('sessionId is required to resume a chat session');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(normalized)}/resume`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n chatSessionResumeResponseSchema,\n 'chat session resume response',\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.idempotencyKey) {\n body.idempotencyKey = payload.idempotencyKey;\n }\n if (payload.senderUaid) {\n body.senderUaid = payload.senderUaid;\n }\n if (payload.transport) {\n body.transport = payload.transport;\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<ChatSessionEndResponse> {\n const normalizedSessionId = sessionId?.trim();\n if (!normalizedSessionId) {\n throw new Error('sessionId is required to end a chat session');\n }\n const response = await client.request(\n `/chat/session/${encodeURIComponent(normalizedSessionId)}`,\n { method: 'DELETE' },\n );\n if (response.status === 204) {\n return {\n message: 'Session ended',\n sessionId: normalizedSessionId,\n state: 'ended',\n };\n }\n const contentType = response.headers?.get('content-type') ?? '';\n if (!contentType.toLowerCase().includes('json')) {\n await response.text();\n return {\n message: 'Session ended',\n sessionId: normalizedSessionId,\n state: 'ended',\n };\n }\n const responseBody = await response.text();\n if (responseBody.trim().length === 0) {\n return {\n message: 'Session ended',\n sessionId: normalizedSessionId,\n state: 'ended',\n };\n }\n const raw = JSON.parse(responseBody) as JsonValue;\n return client.parseWithSchema(\n raw,\n chatSessionEndResponseSchema,\n 'chat session end response',\n );\n}\n\nexport async function cancelSession(\n client: RegistryBrokerClient,\n sessionId: string,\n): Promise<ChatSessionEndResponse> {\n const normalizedSessionId = sessionId?.trim();\n if (!normalizedSessionId) {\n throw new Error('sessionId is required to cancel a chat session');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(normalizedSessionId)}/cancel`,\n {\n method: 'POST',\n },\n );\n return client.parseWithSchema(\n raw,\n chatSessionEndResponseSchema,\n 'chat session cancel response',\n );\n}\n\nexport async function retryMessage(\n client: RegistryBrokerClient,\n messageId: string,\n payload: ChatRetryRequestPayload,\n): Promise<ChatRetryResponse> {\n const normalizedMessageId = messageId?.trim();\n const normalizedSessionId = payload.sessionId?.trim();\n const normalizedMessage = payload.message?.trim();\n if (!normalizedMessageId) {\n throw new Error('messageId is required to retry a message');\n }\n if (!normalizedSessionId) {\n throw new Error('sessionId is required to retry a message');\n }\n if (!normalizedMessage) {\n throw new Error('message is required to retry a message');\n }\n const body: JsonObject = {\n sessionId: normalizedSessionId,\n message: payload.message,\n };\n if (payload.streaming !== undefined) {\n body.streaming = payload.streaming;\n }\n if (payload.transport) {\n body.transport = payload.transport;\n }\n const uaid = payload.uaid?.trim();\n const agentUrl = payload.agentUrl?.trim();\n const idempotencyKey = payload.idempotencyKey?.trim();\n const senderUaid = payload.senderUaid?.trim();\n if (uaid) {\n body.uaid = uaid;\n }\n if (agentUrl) {\n body.agentUrl = agentUrl;\n }\n if (idempotencyKey) {\n body.idempotencyKey = idempotencyKey;\n }\n if (senderUaid) {\n body.senderUaid = senderUaid;\n }\n if (payload.auth) {\n body.auth = serialiseAuthConfig(payload.auth);\n }\n let cipherEnvelope = payload.cipherEnvelope ?? null;\n if (payload.encryption) {\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: payload.encryption.sessionId ?? normalizedSessionId,\n });\n }\n if (cipherEnvelope) {\n body.cipherEnvelope = toJsonObject(cipherEnvelope);\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/message/${encodeURIComponent(normalizedMessageId)}/retry`,\n {\n method: 'POST',\n body,\n headers: { 'content-type': 'application/json' },\n },\n );\n return client.parseWithSchema(\n raw,\n sendMessageResponseSchema,\n 'chat retry response',\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es199.js","sources":["../../src/services/registry-broker/client/chat-history.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type {\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n JsonValue,\n RecipientIdentity,\n} from '../types';\nimport { chatHistorySnapshotResponseSchema } from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nexport interface ConversationContextInput {\n sessionId: string;\n sharedSecret: Uint8Array | Buffer;\n identity?: RecipientIdentity;\n}\n\nexport interface ConversationContextState {\n sessionId: string;\n sharedSecret: Buffer;\n identity?: RecipientIdentity;\n}\n\nfunction identitiesMatch(\n a?: RecipientIdentity,\n b?: RecipientIdentity,\n): boolean {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {\n return true;\n }\n if (\n a.ledgerAccountId &&\n b.ledgerAccountId &&\n a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()\n ) {\n return true;\n }\n if (a.userId && b.userId && a.userId === b.userId) {\n return true;\n }\n if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {\n return true;\n }\n return false;\n}\n\nexport async function fetchHistorySnapshot(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required to fetch chat history');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/history`,\n {\n method: 'GET',\n },\n );\n const snapshot = client.parseWithSchema(\n raw,\n chatHistorySnapshotResponseSchema,\n 'chat history snapshot response',\n );\n return attachDecryptedHistory(\n conversationContexts,\n client,\n sessionId,\n snapshot,\n options,\n );\n}\n\nexport function attachDecryptedHistory(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n): ChatHistorySnapshotWithDecryptedEntries {\n const shouldDecrypt =\n options?.decrypt !== undefined\n ? options.decrypt\n : client.encryptionOptions?.autoDecryptHistory === true;\n if (!shouldDecrypt) {\n return snapshot;\n }\n const requiresContext = snapshot.history.some(entry =>\n Boolean(entry.cipherEnvelope),\n );\n if (!requiresContext) {\n return {\n ...snapshot,\n decryptedHistory: snapshot.history.map(entry => ({\n entry,\n plaintext: entry.content,\n })),\n };\n }\n const context = resolveDecryptionContext(\n conversationContexts,\n client,\n sessionId,\n options,\n );\n if (!context) {\n throw new Error(\n 'Unable to decrypt chat history: encryption context unavailable',\n );\n }\n const decryptedHistory = snapshot.history.map(entry => ({\n entry,\n plaintext: decryptHistoryEntryFromContext(client, entry, context),\n }));\n return { ...snapshot, decryptedHistory };\n}\n\nexport function registerConversationContextForEncryption(\n conversationContexts: Map<string, ConversationContextState[]>,\n context: ConversationContextInput,\n): void {\n const normalized: ConversationContextState = {\n sessionId: context.sessionId,\n sharedSecret: Buffer.from(context.sharedSecret),\n identity: context.identity ? { ...context.identity } : undefined,\n };\n const entries = conversationContexts.get(context.sessionId) ?? [];\n const existingIndex = entries.findIndex(existing =>\n identitiesMatch(existing.identity, normalized.identity),\n );\n if (existingIndex >= 0) {\n entries[existingIndex] = normalized;\n } else {\n entries.push(normalized);\n }\n conversationContexts.set(context.sessionId, entries);\n}\n\nexport function resolveDecryptionContext(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): ConversationContextState | null {\n if (options?.sharedSecret) {\n return {\n sessionId,\n sharedSecret: client.normalizeSharedSecret(options.sharedSecret),\n identity: options.identity,\n };\n }\n const contexts = conversationContexts.get(sessionId);\n if (!contexts || contexts.length === 0) {\n return null;\n }\n if (options?.identity) {\n const match = contexts.find(context =>\n identitiesMatch(context.identity, options.identity),\n );\n if (match) {\n return match;\n }\n }\n return contexts[0];\n}\n\nexport function decryptHistoryEntryFromContext(\n client: RegistryBrokerClient,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n): string | null {\n const envelope = entry.cipherEnvelope;\n if (!envelope) {\n return entry.content;\n }\n const secret = Buffer.from(context.sharedSecret);\n try {\n return client.encryption.decryptCipherEnvelope({\n envelope,\n sharedSecret: secret,\n });\n } catch (_error) {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}