@hashgraphonline/standards-sdk 0.1.157 → 0.1.159

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 (275) hide show
  1. package/dist/cjs/hcs-12/validation/schemas.d.ts +2 -2
  2. package/dist/cjs/hcs-17/types.d.ts +4 -4
  3. package/dist/cjs/hcs-2/types.d.ts +20 -20
  4. package/dist/cjs/hcs-20/types.d.ts +8 -8
  5. package/dist/cjs/hcs-26/base-client.d.ts +83 -0
  6. package/dist/cjs/hcs-26/base-client.d.ts.map +1 -0
  7. package/dist/cjs/hcs-26/browser.d.ts +11 -0
  8. package/dist/cjs/hcs-26/browser.d.ts.map +1 -0
  9. package/dist/cjs/hcs-26/index.d.ts +7 -0
  10. package/dist/cjs/hcs-26/index.d.ts.map +1 -0
  11. package/dist/cjs/hcs-26/memos.d.ts +28 -0
  12. package/dist/cjs/hcs-26/memos.d.ts.map +1 -0
  13. package/dist/cjs/hcs-26/resolver.d.ts +60 -0
  14. package/dist/cjs/hcs-26/resolver.d.ts.map +1 -0
  15. package/dist/cjs/hcs-26/sdk.d.ts +10 -0
  16. package/dist/cjs/hcs-26/sdk.d.ts.map +1 -0
  17. package/dist/cjs/hcs-26/types.d.ts +2752 -0
  18. package/dist/cjs/hcs-26/types.d.ts.map +1 -0
  19. package/dist/cjs/index.d.ts +1 -0
  20. package/dist/cjs/index.d.ts.map +1 -1
  21. package/dist/cjs/inscribe/inscriber.d.ts +1 -1
  22. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  23. package/dist/cjs/inscribe/inscription-cost.d.ts +12 -0
  24. package/dist/cjs/inscribe/inscription-cost.d.ts.map +1 -0
  25. package/dist/cjs/inscribe/types.d.ts +5 -1
  26. package/dist/cjs/inscribe/types.d.ts.map +1 -1
  27. package/dist/cjs/services/registry-broker/client/base-client.d.ts +19 -1
  28. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/cjs/services/registry-broker/client/skills.d.ts +20 -1
  30. package/dist/cjs/services/registry-broker/client/skills.d.ts.map +1 -1
  31. package/dist/cjs/services/registry-broker/schemas.d.ts +2515 -86
  32. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  33. package/dist/cjs/services/registry-broker/types.d.ts +21 -3
  34. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  35. package/dist/cjs/services/types.d.ts +2 -1
  36. package/dist/cjs/services/types.d.ts.map +1 -1
  37. package/dist/cjs/standards-sdk.cjs +2 -2
  38. package/dist/cjs/standards-sdk.cjs.map +1 -1
  39. package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
  40. package/dist/es/hcs-12/validation/schemas.d.ts +2 -2
  41. package/dist/es/hcs-17/types.d.ts +4 -4
  42. package/dist/es/hcs-2/types.d.ts +20 -20
  43. package/dist/es/hcs-20/types.d.ts +8 -8
  44. package/dist/es/hcs-26/base-client.d.ts +83 -0
  45. package/dist/es/hcs-26/base-client.d.ts.map +1 -0
  46. package/dist/es/hcs-26/browser.d.ts +11 -0
  47. package/dist/es/hcs-26/browser.d.ts.map +1 -0
  48. package/dist/es/hcs-26/index.d.ts +7 -0
  49. package/dist/es/hcs-26/index.d.ts.map +1 -0
  50. package/dist/es/hcs-26/memos.d.ts +28 -0
  51. package/dist/es/hcs-26/memos.d.ts.map +1 -0
  52. package/dist/es/hcs-26/resolver.d.ts +60 -0
  53. package/dist/es/hcs-26/resolver.d.ts.map +1 -0
  54. package/dist/es/hcs-26/sdk.d.ts +10 -0
  55. package/dist/es/hcs-26/sdk.d.ts.map +1 -0
  56. package/dist/es/hcs-26/types.d.ts +2752 -0
  57. package/dist/es/hcs-26/types.d.ts.map +1 -0
  58. package/dist/es/index.d.ts +1 -0
  59. package/dist/es/index.d.ts.map +1 -1
  60. package/dist/es/inscribe/inscriber.d.ts +1 -1
  61. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  62. package/dist/es/inscribe/inscription-cost.d.ts +12 -0
  63. package/dist/es/inscribe/inscription-cost.d.ts.map +1 -0
  64. package/dist/es/inscribe/types.d.ts +5 -1
  65. package/dist/es/inscribe/types.d.ts.map +1 -1
  66. package/dist/es/services/registry-broker/client/base-client.d.ts +19 -1
  67. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  68. package/dist/es/services/registry-broker/client/skills.d.ts +20 -1
  69. package/dist/es/services/registry-broker/client/skills.d.ts.map +1 -1
  70. package/dist/es/services/registry-broker/schemas.d.ts +2515 -86
  71. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  72. package/dist/es/services/registry-broker/types.d.ts +21 -3
  73. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  74. package/dist/es/services/types.d.ts +2 -1
  75. package/dist/es/services/types.d.ts.map +1 -1
  76. package/dist/es/standards-sdk.es.js +70 -32
  77. package/dist/es/standards-sdk.es.js.map +1 -1
  78. package/dist/es/standards-sdk.es101.js +2 -2
  79. package/dist/es/standards-sdk.es103.js +1 -1
  80. package/dist/es/standards-sdk.es104.js +2 -2
  81. package/dist/es/standards-sdk.es105.js +247 -137
  82. package/dist/es/standards-sdk.es105.js.map +1 -1
  83. package/dist/es/standards-sdk.es106.js +477 -28
  84. package/dist/es/standards-sdk.es106.js.map +1 -1
  85. package/dist/es/standards-sdk.es107.js +103 -20
  86. package/dist/es/standards-sdk.es107.js.map +1 -1
  87. package/dist/es/standards-sdk.es108.js +141 -141
  88. package/dist/es/standards-sdk.es108.js.map +1 -1
  89. package/dist/es/standards-sdk.es109.js +31 -200
  90. package/dist/es/standards-sdk.es109.js.map +1 -1
  91. package/dist/es/standards-sdk.es11.js +1 -1
  92. package/dist/es/standards-sdk.es110.js +9 -787
  93. package/dist/es/standards-sdk.es110.js.map +1 -1
  94. package/dist/es/standards-sdk.es111.js +140 -11
  95. package/dist/es/standards-sdk.es111.js.map +1 -1
  96. package/dist/es/standards-sdk.es112.js +29 -567
  97. package/dist/es/standards-sdk.es112.js.map +1 -1
  98. package/dist/es/standards-sdk.es113.js +17 -597
  99. package/dist/es/standards-sdk.es113.js.map +1 -1
  100. package/dist/es/standards-sdk.es114.js +159 -12
  101. package/dist/es/standards-sdk.es114.js.map +1 -1
  102. package/dist/es/standards-sdk.es115.js +203 -2
  103. package/dist/es/standards-sdk.es115.js.map +1 -1
  104. package/dist/es/standards-sdk.es116.js +774 -71
  105. package/dist/es/standards-sdk.es116.js.map +1 -1
  106. package/dist/es/standards-sdk.es117.js +11 -38
  107. package/dist/es/standards-sdk.es117.js.map +1 -1
  108. package/dist/es/standards-sdk.es118.js +567 -2
  109. package/dist/es/standards-sdk.es118.js.map +1 -1
  110. package/dist/es/standards-sdk.es119.js +576 -205
  111. package/dist/es/standards-sdk.es119.js.map +1 -1
  112. package/dist/es/standards-sdk.es12.js +1 -1
  113. package/dist/es/standards-sdk.es120.js +12 -1139
  114. package/dist/es/standards-sdk.es120.js.map +1 -1
  115. package/dist/es/standards-sdk.es121.js +2 -306
  116. package/dist/es/standards-sdk.es121.js.map +1 -1
  117. package/dist/es/standards-sdk.es122.js +83 -418
  118. package/dist/es/standards-sdk.es122.js.map +1 -1
  119. package/dist/es/standards-sdk.es123.js +36 -351
  120. package/dist/es/standards-sdk.es123.js.map +1 -1
  121. package/dist/es/standards-sdk.es124.js +2 -1117
  122. package/dist/es/standards-sdk.es124.js.map +1 -1
  123. package/dist/es/standards-sdk.es125.js +215 -188
  124. package/dist/es/standards-sdk.es125.js.map +1 -1
  125. package/dist/es/standards-sdk.es126.js +1055 -1482
  126. package/dist/es/standards-sdk.es126.js.map +1 -1
  127. package/dist/es/standards-sdk.es127.js +306 -1138
  128. package/dist/es/standards-sdk.es127.js.map +1 -1
  129. package/dist/es/standards-sdk.es128.js +419 -14
  130. package/dist/es/standards-sdk.es128.js.map +1 -1
  131. package/dist/es/standards-sdk.es129.js +350 -82
  132. package/dist/es/standards-sdk.es129.js.map +1 -1
  133. package/dist/es/standards-sdk.es13.js +1 -1
  134. package/dist/es/standards-sdk.es130.js +1107 -72
  135. package/dist/es/standards-sdk.es130.js.map +1 -1
  136. package/dist/es/standards-sdk.es131.js +181 -845
  137. package/dist/es/standards-sdk.es131.js.map +1 -1
  138. package/dist/es/standards-sdk.es132.js +1558 -51
  139. package/dist/es/standards-sdk.es132.js.map +1 -1
  140. package/dist/es/standards-sdk.es133.js +1236 -159
  141. package/dist/es/standards-sdk.es133.js.map +1 -1
  142. package/dist/es/standards-sdk.es134.js +17 -7
  143. package/dist/es/standards-sdk.es134.js.map +1 -1
  144. package/dist/es/standards-sdk.es135.js +79 -78
  145. package/dist/es/standards-sdk.es135.js.map +1 -1
  146. package/dist/es/standards-sdk.es136.js +75 -59
  147. package/dist/es/standards-sdk.es136.js.map +1 -1
  148. package/dist/es/standards-sdk.es137.js +893 -30
  149. package/dist/es/standards-sdk.es137.js.map +1 -1
  150. package/dist/es/standards-sdk.es138.js +60 -34
  151. package/dist/es/standards-sdk.es138.js.map +1 -1
  152. package/dist/es/standards-sdk.es139.js +159 -28
  153. package/dist/es/standards-sdk.es139.js.map +1 -1
  154. package/dist/es/standards-sdk.es14.js +1 -1
  155. package/dist/es/standards-sdk.es140.js +7 -138
  156. package/dist/es/standards-sdk.es140.js.map +1 -1
  157. package/dist/es/standards-sdk.es141.js +80 -36
  158. package/dist/es/standards-sdk.es141.js.map +1 -1
  159. package/dist/es/standards-sdk.es142.js +58 -49
  160. package/dist/es/standards-sdk.es142.js.map +1 -1
  161. package/dist/es/standards-sdk.es143.js +30 -84
  162. package/dist/es/standards-sdk.es143.js.map +1 -1
  163. package/dist/es/standards-sdk.es144.js +34 -12320
  164. package/dist/es/standards-sdk.es144.js.map +1 -1
  165. package/dist/es/standards-sdk.es145.js +28 -17
  166. package/dist/es/standards-sdk.es145.js.map +1 -1
  167. package/dist/es/standards-sdk.es146.js +118 -152
  168. package/dist/es/standards-sdk.es146.js.map +1 -1
  169. package/dist/es/standards-sdk.es147.js +34 -314
  170. package/dist/es/standards-sdk.es147.js.map +1 -1
  171. package/dist/es/standards-sdk.es148.js +12426 -290
  172. package/dist/es/standards-sdk.es148.js.map +1 -1
  173. package/dist/es/standards-sdk.es149.js +231 -442
  174. package/dist/es/standards-sdk.es149.js.map +1 -1
  175. package/dist/es/standards-sdk.es15.js +1 -1
  176. package/dist/es/standards-sdk.es150.js +142 -301
  177. package/dist/es/standards-sdk.es150.js.map +1 -1
  178. package/dist/es/standards-sdk.es151.js +310 -64
  179. package/dist/es/standards-sdk.es151.js.map +1 -1
  180. package/dist/es/standards-sdk.es152.js +332 -158
  181. package/dist/es/standards-sdk.es152.js.map +1 -1
  182. package/dist/es/standards-sdk.es153.js +441 -210
  183. package/dist/es/standards-sdk.es153.js.map +1 -1
  184. package/dist/es/standards-sdk.es154.js +314 -222
  185. package/dist/es/standards-sdk.es154.js.map +1 -1
  186. package/dist/es/standards-sdk.es155.js +65 -108
  187. package/dist/es/standards-sdk.es155.js.map +1 -1
  188. package/dist/es/standards-sdk.es156.js +14 -123
  189. package/dist/es/standards-sdk.es156.js.map +1 -1
  190. package/dist/es/standards-sdk.es157.js +60 -148
  191. package/dist/es/standards-sdk.es157.js.map +1 -1
  192. package/dist/es/standards-sdk.es158.js +47 -176
  193. package/dist/es/standards-sdk.es158.js.map +1 -1
  194. package/dist/es/standards-sdk.es159.js +65 -120
  195. package/dist/es/standards-sdk.es159.js.map +1 -1
  196. package/dist/es/standards-sdk.es16.js +5 -5
  197. package/dist/es/standards-sdk.es160.js +147 -306
  198. package/dist/es/standards-sdk.es160.js.map +1 -1
  199. package/dist/es/standards-sdk.es161.js +205 -242
  200. package/dist/es/standards-sdk.es161.js.map +1 -1
  201. package/dist/es/standards-sdk.es162.js +233 -110
  202. package/dist/es/standards-sdk.es162.js.map +1 -1
  203. package/dist/es/standards-sdk.es163.js +84 -78
  204. package/dist/es/standards-sdk.es163.js.map +1 -1
  205. package/dist/es/standards-sdk.es164.js +129 -0
  206. package/dist/es/standards-sdk.es164.js.map +1 -0
  207. package/dist/es/standards-sdk.es165.js +164 -0
  208. package/dist/es/standards-sdk.es165.js.map +1 -0
  209. package/dist/es/standards-sdk.es166.js +188 -0
  210. package/dist/es/standards-sdk.es166.js.map +1 -0
  211. package/dist/es/standards-sdk.es167.js +142 -0
  212. package/dist/es/standards-sdk.es167.js.map +1 -0
  213. package/dist/es/standards-sdk.es168.js +334 -0
  214. package/dist/es/standards-sdk.es168.js.map +1 -0
  215. package/dist/es/standards-sdk.es169.js +262 -0
  216. package/dist/es/standards-sdk.es169.js.map +1 -0
  217. package/dist/es/standards-sdk.es170.js +119 -0
  218. package/dist/es/standards-sdk.es170.js.map +1 -0
  219. package/dist/es/standards-sdk.es18.js +12 -12
  220. package/dist/es/standards-sdk.es19.js +9 -9
  221. package/dist/es/standards-sdk.es2.js +2 -2
  222. package/dist/es/standards-sdk.es20.js +1 -1
  223. package/dist/es/standards-sdk.es21.js +1 -1
  224. package/dist/es/standards-sdk.es22.js +1 -1
  225. package/dist/es/standards-sdk.es23.js +1 -1
  226. package/dist/es/standards-sdk.es24.js +1 -1
  227. package/dist/es/standards-sdk.es25.js +1 -1
  228. package/dist/es/standards-sdk.es26.js +1 -1
  229. package/dist/es/standards-sdk.es27.js +12 -12
  230. package/dist/es/standards-sdk.es30.js +2 -2
  231. package/dist/es/standards-sdk.es31.js +4 -4
  232. package/dist/es/standards-sdk.es32.js +1 -1
  233. package/dist/es/standards-sdk.es35.js +6 -6
  234. package/dist/es/standards-sdk.es36.js +4 -4
  235. package/dist/es/standards-sdk.es37.js +2 -2
  236. package/dist/es/standards-sdk.es38.js +2 -2
  237. package/dist/es/standards-sdk.es39.js +1 -1
  238. package/dist/es/standards-sdk.es4.js +2 -2
  239. package/dist/es/standards-sdk.es40.js +1 -1
  240. package/dist/es/standards-sdk.es41.js +2 -2
  241. package/dist/es/standards-sdk.es46.js +1 -1
  242. package/dist/es/standards-sdk.es5.js +2 -2
  243. package/dist/es/standards-sdk.es51.js +1 -1
  244. package/dist/es/standards-sdk.es53.js +1 -1
  245. package/dist/es/standards-sdk.es56.js +2 -2
  246. package/dist/es/standards-sdk.es58.js +1 -1
  247. package/dist/es/standards-sdk.es59.js +1 -1
  248. package/dist/es/standards-sdk.es6.js +2 -2
  249. package/dist/es/standards-sdk.es60.js +7 -7
  250. package/dist/es/standards-sdk.es62.js +1 -1
  251. package/dist/es/standards-sdk.es64.js +2 -2
  252. package/dist/es/standards-sdk.es65.js +3 -3
  253. package/dist/es/standards-sdk.es68.js +2 -2
  254. package/dist/es/standards-sdk.es69.js +3 -3
  255. package/dist/es/standards-sdk.es7.js +1 -1
  256. package/dist/es/standards-sdk.es70.js +2 -2
  257. package/dist/es/standards-sdk.es71.js +1 -1
  258. package/dist/es/standards-sdk.es74.js +2 -2
  259. package/dist/es/standards-sdk.es76.js +2 -2
  260. package/dist/es/standards-sdk.es77.js +4 -4
  261. package/dist/es/standards-sdk.es78.js +1 -1
  262. package/dist/es/standards-sdk.es81.js +1 -1
  263. package/dist/es/standards-sdk.es82.js +2 -2
  264. package/dist/es/standards-sdk.es83.js +4 -4
  265. package/dist/es/standards-sdk.es87.js +3 -3
  266. package/dist/es/standards-sdk.es89.js +2 -2
  267. package/dist/es/standards-sdk.es9.js +2 -2
  268. package/dist/es/standards-sdk.es91.js +1 -1
  269. package/dist/es/standards-sdk.es92.js +3 -3
  270. package/dist/es/standards-sdk.es94.js +2 -2
  271. package/dist/es/standards-sdk.es96.js +2 -2
  272. package/dist/es/standards-sdk.es97.js +1 -1
  273. package/dist/es/standards-sdk.es99.js +1 -1
  274. package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
  275. package/package.json +5 -4
@@ -1,262 +1,225 @@
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 { searchResponseSchema, statsResponseSchema, registriesResponseSchema, additionalRegistryCatalogResponseSchema, popularResponseSchema, protocolsResponseSchema, detectProtocolResponseSchema, registrySearchByNamespaceSchema, vectorSearchResponseSchema, searchStatusResponseSchema, websocketStatsResponseSchema, metricsSummaryResponseSchema, searchFacetsResponseSchema } from "./standards-sdk.es133.js";
2
+ import { buildSearchQuery } from "./standards-sdk.es162.js";
3
+ import { RegistryBrokerError } from "./standards-sdk.es134.js";
4
+ function buildVectorFallbackSearchParams(request) {
5
+ const params = {
6
+ q: request.query
7
+ };
8
+ let effectiveLimit;
9
+ if (typeof request.limit === "number" && Number.isFinite(request.limit)) {
10
+ effectiveLimit = request.limit;
11
+ params.limit = request.limit;
6
12
  }
7
- }
8
- class EncryptedChatManager {
9
- constructor(client) {
10
- this.client = client;
13
+ if (typeof request.offset === "number" && Number.isFinite(request.offset) && request.offset > 0) {
14
+ const limit = effectiveLimit && effectiveLimit > 0 ? effectiveLimit : 20;
15
+ params.limit = limit;
16
+ params.page = Math.floor(request.offset / limit) + 1;
11
17
  }
12
- registerConversationContext(context) {
13
- this.client.registerConversationContextForEncryption(context);
18
+ if (request.filter?.registry) {
19
+ params.registry = request.filter.registry;
14
20
  }
15
- async startSession(options) {
16
- await this.client.encryptionReady();
17
- const session = await this.client.chat.createSession({
18
- uaid: options.uaid,
19
- senderUaid: options.senderUaid,
20
- encryptionRequested: true,
21
- historyTtlSeconds: options.historyTtlSeconds,
22
- auth: options.auth
23
- });
24
- 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,
35
- senderUaid: options.senderUaid,
36
- handshakeTimeoutMs: options.handshakeTimeoutMs,
37
- pollIntervalMs: options.pollIntervalMs
38
- });
39
- return handle;
21
+ if (request.filter?.protocols?.length) {
22
+ params.protocols = [...request.filter.protocols];
40
23
  }
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({
49
- sessionId: options.sessionId,
50
- summary,
51
- responderUaid: options.responderUaid,
52
- handshakeTimeoutMs: options.handshakeTimeoutMs,
53
- pollIntervalMs: options.pollIntervalMs
54
- });
55
- return handle;
24
+ if (request.filter?.adapter?.length) {
25
+ params.adapters = [...request.filter.adapter];
56
26
  }
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
27
+ if (request.filter?.capabilities?.length) {
28
+ params.capabilities = request.filter.capabilities.map(
29
+ (value) => typeof value === "number" ? value.toString(10) : value
69
30
  );
70
- const responderKey = record.responder?.ephemeralPublicKey;
71
- if (!responderKey) {
72
- throw new Error("Responder handshake was not completed in time");
73
- }
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
- });
86
31
  }
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");
103
- }
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
- });
32
+ if (request.filter?.type) {
33
+ params.type = request.filter.type;
116
34
  }
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 };
125
- }
126
- if (Date.now() >= deadline) {
127
- throw new Error("Timed out waiting for encrypted handshake completion");
128
- }
129
- await this.delay(pollIntervalMs);
35
+ return params;
36
+ }
37
+ function convertSearchResultToVectorResponse(result) {
38
+ const hits = result.hits.map((agent) => ({
39
+ agent,
40
+ score: 0,
41
+ highlights: {}
42
+ }));
43
+ const total = result.total;
44
+ const limit = result.limit;
45
+ const page = result.page;
46
+ const totalVisible = page * limit;
47
+ const limited = total > totalVisible || page > 1;
48
+ return {
49
+ hits,
50
+ total,
51
+ took: 0,
52
+ totalAvailable: total,
53
+ visible: hits.length,
54
+ limited,
55
+ credits_used: 0
56
+ };
57
+ }
58
+ async function search(client, params = {}) {
59
+ const query = buildSearchQuery(params);
60
+ const raw = await client.requestJson(`/search${query}`, {
61
+ method: "GET"
62
+ });
63
+ return client.parseWithSchema(raw, searchResponseSchema, "search response");
64
+ }
65
+ async function stats(client) {
66
+ const raw = await client.requestJson("/stats", { method: "GET" });
67
+ return client.parseWithSchema(raw, statsResponseSchema, "stats response");
68
+ }
69
+ async function registries(client) {
70
+ const raw = await client.requestJson("/registries", {
71
+ method: "GET"
72
+ });
73
+ return client.parseWithSchema(
74
+ raw,
75
+ registriesResponseSchema,
76
+ "registries response"
77
+ );
78
+ }
79
+ async function getAdditionalRegistries(client) {
80
+ const raw = await client.requestJson(
81
+ "/register/additional-registries",
82
+ {
83
+ method: "GET"
130
84
  }
85
+ );
86
+ return client.parseWithSchema(
87
+ raw,
88
+ additionalRegistryCatalogResponseSchema,
89
+ "additional registry catalog response"
90
+ );
91
+ }
92
+ async function popularSearches(client) {
93
+ const raw = await client.requestJson("/popular", {
94
+ method: "GET"
95
+ });
96
+ return client.parseWithSchema(
97
+ raw,
98
+ popularResponseSchema,
99
+ "popular searches response"
100
+ );
101
+ }
102
+ async function listProtocols(client) {
103
+ const raw = await client.requestJson("/protocols", {
104
+ method: "GET"
105
+ });
106
+ return client.parseWithSchema(
107
+ raw,
108
+ protocolsResponseSchema,
109
+ "protocols response"
110
+ );
111
+ }
112
+ async function detectProtocol(client, message) {
113
+ const raw = await client.requestJson("/detect-protocol", {
114
+ method: "POST",
115
+ body: { message },
116
+ headers: { "content-type": "application/json" }
117
+ });
118
+ return client.parseWithSchema(
119
+ raw,
120
+ detectProtocolResponseSchema,
121
+ "detect protocol response"
122
+ );
123
+ }
124
+ async function registrySearchByNamespace(client, registry, query) {
125
+ const params = new URLSearchParams();
126
+ if (query) {
127
+ params.set("q", query);
131
128
  }
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
- );
129
+ const suffix = params.size > 0 ? `?${params.toString()}` : "";
130
+ const raw = await client.requestJson(
131
+ `/registries/${encodeURIComponent(registry)}/search${suffix}`,
132
+ {
133
+ method: "GET"
139
134
  }
140
- return status.encryption;
141
- }
142
- buildRecipients(summary) {
143
- const candidates = [summary.requester, summary.responder].filter(Boolean);
144
- const normalized = candidates.map((candidate) => {
145
- if (!candidate) {
146
- return null;
147
- }
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
- )
135
+ );
136
+ return client.parseWithSchema(
137
+ raw,
138
+ registrySearchByNamespaceSchema,
139
+ "registry search response"
140
+ );
141
+ }
142
+ async function vectorSearch(client, request) {
143
+ try {
144
+ const raw = await client.requestJson("/search", {
145
+ method: "POST",
146
+ body: request,
147
+ headers: { "content-type": "application/json" }
148
+ });
149
+ return client.parseWithSchema(
150
+ raw,
151
+ vectorSearchResponseSchema,
152
+ "vector search response"
166
153
  );
167
- if (normalized.length > 0) {
168
- return normalized;
169
- }
170
- if (summary.responder?.uaid) {
171
- return [{ uaid: summary.responder.uaid }];
172
- }
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
154
+ } catch (error) {
155
+ if (error instanceof RegistryBrokerError && error.status === 501) {
156
+ const fallback = await search(
157
+ client,
158
+ buildVectorFallbackSearchParams(request)
183
159
  );
184
- if (snapshot.decryptedHistory) {
185
- return snapshot.decryptedHistory;
186
- }
187
- return snapshot.history.map((entry) => ({
188
- entry,
189
- plaintext: decryptHistoryEntry(entry)
190
- }));
191
- };
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
213
- };
214
- this.registerConversationContext({
215
- sessionId: context.sessionId,
216
- sharedSecret,
217
- identity: context.identity
218
- });
219
- return handle;
220
- }
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;
160
+ return convertSearchResultToVectorResponse(fallback);
234
161
  }
162
+ throw error;
235
163
  }
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;
248
- }
249
- return false;
250
- }
251
- async delay(ms) {
252
- if (ms <= 0) {
253
- return;
254
- }
255
- await new Promise((resolve) => setTimeout(resolve, ms));
164
+ }
165
+ async function searchStatus(client) {
166
+ const raw = await client.requestJson("/search/status", {
167
+ method: "GET"
168
+ });
169
+ return client.parseWithSchema(
170
+ raw,
171
+ searchStatusResponseSchema,
172
+ "search status response"
173
+ );
174
+ }
175
+ async function websocketStats(client) {
176
+ const raw = await client.requestJson("/websocket/stats", {
177
+ method: "GET"
178
+ });
179
+ return client.parseWithSchema(
180
+ raw,
181
+ websocketStatsResponseSchema,
182
+ "websocket stats response"
183
+ );
184
+ }
185
+ async function metricsSummary(client) {
186
+ const raw = await client.requestJson("/metrics", {
187
+ method: "GET"
188
+ });
189
+ return client.parseWithSchema(
190
+ raw,
191
+ metricsSummaryResponseSchema,
192
+ "metrics summary response"
193
+ );
194
+ }
195
+ async function facets(client, adapter) {
196
+ const params = new URLSearchParams();
197
+ if (adapter) {
198
+ params.set("adapter", adapter);
256
199
  }
200
+ const suffix = params.size > 0 ? `?${params.toString()}` : "";
201
+ const raw = await client.requestJson(`/search/facets${suffix}`, {
202
+ method: "GET"
203
+ });
204
+ return client.parseWithSchema(
205
+ raw,
206
+ searchFacetsResponseSchema,
207
+ "search facets response"
208
+ );
257
209
  }
258
210
  export {
259
- EncryptedChatManager,
260
- EncryptionUnavailableError
211
+ detectProtocol,
212
+ facets,
213
+ getAdditionalRegistries,
214
+ listProtocols,
215
+ metricsSummary,
216
+ popularSearches,
217
+ registries,
218
+ registrySearchByNamespace,
219
+ search,
220
+ searchStatus,
221
+ stats,
222
+ vectorSearch,
223
+ websocketStats
261
224
  };
262
225
  //# sourceMappingURL=standards-sdk.es161.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es161.js","sources":["../../src/services/registry-broker/client/encrypted-chat-manager.ts"],"sourcesContent":["import type {\n AcceptEncryptedChatSessionOptions,\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n CipherEnvelopeRecipient,\n DecryptedHistoryEntry,\n EncryptedChatSessionHandle,\n EncryptionHandshakeRecord,\n RecipientIdentity,\n SessionEncryptionSummary,\n SharedSecretInput,\n StartEncryptedChatSessionOptions,\n} from '../types';\nimport type { RegistryBrokerClient } from './base-client';\n\ninterface EncryptedSessionContext {\n sessionId: string;\n sharedSecret: Uint8Array;\n summary: SessionEncryptionSummary;\n recipients: RecipientIdentity[];\n identity?: RecipientIdentity;\n}\n\ninterface ConversationContextInput {\n sessionId: string;\n sharedSecret: Uint8Array | Buffer;\n identity?: RecipientIdentity;\n}\n\nexport class EncryptionUnavailableError extends Error {\n constructor(\n readonly sessionId: string,\n readonly summary?: SessionEncryptionSummary | null,\n ) {\n super('Encryption is not enabled for this session');\n }\n}\n\nexport class EncryptedChatManager {\n constructor(private readonly client: RegistryBrokerClient) {}\n\n registerConversationContext(context: ConversationContextInput): void {\n this.client.registerConversationContextForEncryption(context);\n }\n\n async startSession(\n options: StartEncryptedChatSessionOptions,\n ): Promise<EncryptedChatSessionHandle> {\n await this.client.encryptionReady();\n const session = await this.client.chat.createSession({\n uaid: options.uaid,\n senderUaid: options.senderUaid,\n encryptionRequested: true,\n historyTtlSeconds: options.historyTtlSeconds,\n auth: options.auth,\n });\n options.onSessionCreated?.(session.sessionId);\n const summary = session.encryption;\n if (!summary?.enabled) {\n throw new EncryptionUnavailableError(\n session.sessionId,\n session.encryption ?? null,\n );\n }\n const handle = await this.establishRequesterContext({\n sessionId: session.sessionId,\n summary,\n senderUaid: options.senderUaid,\n handshakeTimeoutMs: options.handshakeTimeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n });\n return handle;\n }\n\n async acceptSession(\n options: AcceptEncryptedChatSessionOptions,\n ): Promise<EncryptedChatSessionHandle> {\n await this.client.encryptionReady();\n const summary = await this.waitForEncryptionSummary(\n options.sessionId,\n options.handshakeTimeoutMs,\n options.pollIntervalMs,\n );\n const handle = await this.establishResponderContext({\n sessionId: options.sessionId,\n summary,\n responderUaid: options.responderUaid,\n handshakeTimeoutMs: options.handshakeTimeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n });\n return handle;\n }\n\n private async establishRequesterContext(params: {\n sessionId: string;\n summary: SessionEncryptionSummary;\n senderUaid?: string;\n handshakeTimeoutMs?: number;\n pollIntervalMs?: number;\n }): Promise<EncryptedChatSessionHandle> {\n const keyPair = this.client.encryption.generateEphemeralKeyPair();\n await this.client.chat.submitEncryptionHandshake(params.sessionId, {\n role: 'requester',\n keyType: 'secp256k1',\n ephemeralPublicKey: keyPair.publicKey,\n uaid: params.senderUaid ?? params.summary.requester?.uaid ?? undefined,\n });\n const { summary, record } = await this.waitForHandshakeCompletion(\n params.sessionId,\n params.handshakeTimeoutMs,\n params.pollIntervalMs,\n );\n const responderKey = record.responder?.ephemeralPublicKey;\n if (!responderKey) {\n throw new Error('Responder handshake was not completed in time');\n }\n const sharedSecret = this.client.encryption\n .deriveSharedSecret({\n privateKey: keyPair.privateKey,\n peerPublicKey: responderKey,\n })\n .subarray();\n const recipients = this.buildRecipients(summary);\n return this.createHandle({\n sessionId: params.sessionId,\n sharedSecret,\n summary,\n recipients,\n identity: summary.requester ?? undefined,\n });\n }\n\n private async establishResponderContext(params: {\n sessionId: string;\n summary: SessionEncryptionSummary;\n responderUaid?: string;\n handshakeTimeoutMs?: number;\n pollIntervalMs?: number;\n }): Promise<EncryptedChatSessionHandle> {\n const keyPair = this.client.encryption.generateEphemeralKeyPair();\n await this.client.chat.submitEncryptionHandshake(params.sessionId, {\n role: 'responder',\n keyType: 'secp256k1',\n ephemeralPublicKey: keyPair.publicKey,\n uaid: params.responderUaid ?? params.summary.responder?.uaid ?? undefined,\n });\n const { summary, record } = await this.waitForHandshakeCompletion(\n params.sessionId,\n params.handshakeTimeoutMs,\n params.pollIntervalMs,\n );\n const requesterKey = record.requester?.ephemeralPublicKey;\n if (!requesterKey) {\n throw new Error('Requester handshake was not detected in time');\n }\n const sharedSecret = this.client.encryption\n .deriveSharedSecret({\n privateKey: keyPair.privateKey,\n peerPublicKey: requesterKey,\n })\n .subarray();\n const recipients = this.buildRecipients(summary);\n return this.createHandle({\n sessionId: params.sessionId,\n sharedSecret,\n summary,\n recipients,\n identity: summary.responder ?? undefined,\n });\n }\n\n private async waitForHandshakeCompletion(\n sessionId: string,\n timeoutMs = 30_000,\n pollIntervalMs = 1_000,\n ): Promise<{\n summary: SessionEncryptionSummary;\n record: EncryptionHandshakeRecord;\n }> {\n const deadline = Date.now() + timeoutMs;\n while (true) {\n const status = await this.client.chat.getEncryptionStatus(sessionId);\n const summary = status.encryption;\n const record = summary?.handshake;\n if (summary && record && record.status === 'complete') {\n return { summary, record };\n }\n if (Date.now() >= deadline) {\n throw new Error('Timed out waiting for encrypted handshake completion');\n }\n await this.delay(pollIntervalMs);\n }\n }\n\n private async waitForEncryptionSummary(\n sessionId: string,\n _timeoutMs = 30_000,\n _pollIntervalMs = 1_000,\n ): Promise<SessionEncryptionSummary> {\n const status = await this.client.chat.getEncryptionStatus(sessionId);\n if (!status.encryption?.enabled) {\n throw new EncryptionUnavailableError(\n sessionId,\n status.encryption ?? null,\n );\n }\n return status.encryption;\n }\n\n private buildRecipients(\n summary: SessionEncryptionSummary,\n ): RecipientIdentity[] {\n const candidates = [summary.requester, summary.responder].filter(Boolean);\n const normalized = candidates\n .map(candidate => {\n if (!candidate) {\n return null;\n }\n const recipient: RecipientIdentity = {};\n if (candidate.uaid) {\n recipient.uaid = candidate.uaid;\n }\n if (candidate.ledgerAccountId) {\n recipient.ledgerAccountId = candidate.ledgerAccountId;\n }\n if (candidate.userId) {\n recipient.userId = candidate.userId;\n }\n if (candidate.email) {\n recipient.email = candidate.email;\n }\n return recipient;\n })\n .filter((entry): entry is RecipientIdentity =>\n Boolean(\n entry?.uaid ||\n entry?.ledgerAccountId ||\n entry?.userId ||\n entry?.email,\n ),\n );\n if (normalized.length > 0) {\n return normalized;\n }\n if (summary.responder?.uaid) {\n return [{ uaid: summary.responder.uaid }];\n }\n return [];\n }\n\n private createHandle(\n context: EncryptedSessionContext,\n ): EncryptedChatSessionHandle {\n const sharedSecret = context.sharedSecret;\n const uaid =\n context.summary.requester?.uaid ??\n context.summary.responder?.uaid ??\n context.identity?.uaid;\n const decryptHistoryEntry = (entry: ChatHistoryEntry): string | null =>\n this.decryptEntry(entry, context.identity, sharedSecret);\n const fetchHistory = async (\n options?: ChatHistoryFetchOptions,\n ): Promise<DecryptedHistoryEntry[]> => {\n const snapshot = await this.client.fetchHistorySnapshot(\n context.sessionId,\n options,\n );\n if (snapshot.decryptedHistory) {\n return snapshot.decryptedHistory;\n }\n return snapshot.history.map(entry => ({\n entry,\n plaintext: decryptHistoryEntry(entry),\n }));\n };\n const handle: EncryptedChatSessionHandle = {\n sessionId: context.sessionId,\n mode: 'encrypted',\n summary: context.summary,\n send: async options => {\n const recipients = options.recipients ?? context.recipients;\n return this.client.chat.sendMessage({\n sessionId: context.sessionId,\n message: options.message ?? '[ciphertext omitted]',\n streaming: options.streaming,\n auth: options.auth,\n uaid,\n encryption: {\n plaintext: options.plaintext,\n sharedSecret: Buffer.from(sharedSecret),\n recipients,\n },\n });\n },\n decryptHistoryEntry,\n fetchHistory,\n };\n this.registerConversationContext({\n sessionId: context.sessionId,\n sharedSecret,\n identity: context.identity,\n });\n return handle;\n }\n\n private decryptEntry(\n entry: ChatHistoryEntry,\n identity: RecipientIdentity | undefined,\n fallbackSecret: Uint8Array,\n ): string | null {\n const envelope = entry.cipherEnvelope;\n if (!envelope) {\n return null;\n }\n const secret: SharedSecretInput = Buffer.from(fallbackSecret);\n try {\n return this.client.encryption.decryptCipherEnvelope({\n envelope,\n sharedSecret: secret,\n });\n } catch (_error) {\n return null;\n }\n }\n\n private recipientMatches(\n candidate: CipherEnvelopeRecipient,\n target: RecipientIdentity,\n ): boolean {\n if (\n target.uaid &&\n candidate.uaid?.toLowerCase() === target.uaid.toLowerCase()\n ) {\n return true;\n }\n if (\n target.ledgerAccountId &&\n candidate.ledgerAccountId?.toLowerCase() ===\n target.ledgerAccountId.toLowerCase()\n ) {\n return true;\n }\n if (target.userId && candidate.userId === target.userId) {\n return true;\n }\n if (\n target.email &&\n candidate.email?.toLowerCase() === target.email.toLowerCase()\n ) {\n return true;\n }\n return false;\n }\n\n private async delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return;\n }\n await new Promise(resolve => setTimeout(resolve, ms));\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es161.js","sources":["../../src/services/registry-broker/client/search.ts"],"sourcesContent":["import type {\n JsonValue,\n PopularSearchesResponse,\n ProtocolDetectionMessage,\n DetectProtocolResponse,\n ProtocolsResponse,\n RegistriesResponse,\n AdditionalRegistryCatalogResponse,\n RegistrySearchByNamespaceResponse,\n RegistryStatsResponse,\n SearchFacetsResponse,\n SearchParams,\n SearchResult,\n SearchStatusResponse,\n VectorSearchRequest,\n VectorSearchResponse,\n WebsocketStatsResponse,\n MetricsSummaryResponse,\n} from '../types';\nimport {\n additionalRegistryCatalogResponseSchema,\n detectProtocolResponseSchema,\n metricsSummaryResponseSchema,\n popularResponseSchema,\n protocolsResponseSchema,\n registriesResponseSchema,\n registrySearchByNamespaceSchema,\n searchFacetsResponseSchema,\n searchResponseSchema,\n searchStatusResponseSchema,\n statsResponseSchema,\n vectorSearchResponseSchema,\n websocketStatsResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { buildSearchQuery } from './utils';\nimport { RegistryBrokerError } from './errors';\n\nfunction buildVectorFallbackSearchParams(\n request: VectorSearchRequest,\n): SearchParams {\n const params: SearchParams = {\n q: request.query,\n };\n let effectiveLimit: number | undefined;\n if (typeof request.limit === 'number' && Number.isFinite(request.limit)) {\n effectiveLimit = request.limit;\n params.limit = request.limit;\n }\n if (\n typeof request.offset === 'number' &&\n Number.isFinite(request.offset) &&\n request.offset > 0\n ) {\n const limit = effectiveLimit && effectiveLimit > 0 ? effectiveLimit : 20;\n params.limit = limit;\n params.page = Math.floor(request.offset / limit) + 1;\n }\n if (request.filter?.registry) {\n params.registry = request.filter.registry;\n }\n if (request.filter?.protocols?.length) {\n params.protocols = [...request.filter.protocols];\n }\n if (request.filter?.adapter?.length) {\n params.adapters = [...request.filter.adapter];\n }\n if (request.filter?.capabilities?.length) {\n params.capabilities = request.filter.capabilities.map(value =>\n typeof value === 'number' ? value.toString(10) : value,\n );\n }\n if (request.filter?.type) {\n params.type = request.filter.type;\n }\n return params;\n}\n\nfunction convertSearchResultToVectorResponse(\n result: SearchResult,\n): VectorSearchResponse {\n const hits = result.hits.map(agent => ({\n agent,\n score: 0,\n highlights: {},\n }));\n const total = result.total;\n const limit = result.limit;\n const page = result.page;\n const totalVisible = page * limit;\n const limited = total > totalVisible || page > 1;\n\n return {\n hits,\n total,\n took: 0,\n totalAvailable: total,\n visible: hits.length,\n limited,\n credits_used: 0,\n };\n}\n\nexport async function search(\n client: RegistryBrokerClient,\n params: SearchParams = {},\n): Promise<SearchResult> {\n const query = buildSearchQuery(params);\n const raw = await client.requestJson<JsonValue>(`/search${query}`, {\n method: 'GET',\n });\n return client.parseWithSchema(raw, searchResponseSchema, 'search response');\n}\n\nexport async function stats(\n client: RegistryBrokerClient,\n): Promise<RegistryStatsResponse> {\n const raw = await client.requestJson<JsonValue>('/stats', { method: 'GET' });\n return client.parseWithSchema(raw, statsResponseSchema, 'stats response');\n}\n\nexport async function registries(\n client: RegistryBrokerClient,\n): Promise<RegistriesResponse> {\n const raw = await client.requestJson<JsonValue>('/registries', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n registriesResponseSchema,\n 'registries response',\n );\n}\n\nexport async function getAdditionalRegistries(\n client: RegistryBrokerClient,\n): Promise<AdditionalRegistryCatalogResponse> {\n const raw = await client.requestJson<JsonValue>(\n '/register/additional-registries',\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n additionalRegistryCatalogResponseSchema,\n 'additional registry catalog response',\n );\n}\n\nexport async function popularSearches(\n client: RegistryBrokerClient,\n): Promise<PopularSearchesResponse> {\n const raw = await client.requestJson<JsonValue>('/popular', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n popularResponseSchema,\n 'popular searches response',\n );\n}\n\nexport async function listProtocols(\n client: RegistryBrokerClient,\n): Promise<ProtocolsResponse> {\n const raw = await client.requestJson<JsonValue>('/protocols', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n protocolsResponseSchema,\n 'protocols response',\n );\n}\n\nexport async function detectProtocol(\n client: RegistryBrokerClient,\n message: ProtocolDetectionMessage,\n): Promise<DetectProtocolResponse> {\n const raw = await client.requestJson<JsonValue>('/detect-protocol', {\n method: 'POST',\n body: { message },\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n detectProtocolResponseSchema,\n 'detect protocol response',\n );\n}\n\nexport async function registrySearchByNamespace(\n client: RegistryBrokerClient,\n registry: string,\n query?: string,\n): Promise<RegistrySearchByNamespaceResponse> {\n const params = new URLSearchParams();\n if (query) {\n params.set('q', query);\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n const raw = await client.requestJson<JsonValue>(\n `/registries/${encodeURIComponent(registry)}/search${suffix}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n registrySearchByNamespaceSchema,\n 'registry search response',\n );\n}\n\nexport async function vectorSearch(\n client: RegistryBrokerClient,\n request: VectorSearchRequest,\n): Promise<VectorSearchResponse> {\n try {\n const raw = await client.requestJson<JsonValue>('/search', {\n method: 'POST',\n body: request,\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n vectorSearchResponseSchema,\n 'vector search response',\n );\n } catch (error) {\n if (error instanceof RegistryBrokerError && error.status === 501) {\n const fallback = await search(\n client,\n buildVectorFallbackSearchParams(request),\n );\n return convertSearchResultToVectorResponse(fallback);\n }\n throw error;\n }\n}\n\nexport async function searchStatus(\n client: RegistryBrokerClient,\n): Promise<SearchStatusResponse> {\n const raw = await client.requestJson<JsonValue>('/search/status', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n searchStatusResponseSchema,\n 'search status response',\n );\n}\n\nexport async function websocketStats(\n client: RegistryBrokerClient,\n): Promise<WebsocketStatsResponse> {\n const raw = await client.requestJson<JsonValue>('/websocket/stats', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n websocketStatsResponseSchema,\n 'websocket stats response',\n );\n}\n\nexport async function metricsSummary(\n client: RegistryBrokerClient,\n): Promise<MetricsSummaryResponse> {\n const raw = await client.requestJson<JsonValue>('/metrics', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n metricsSummaryResponseSchema,\n 'metrics summary response',\n );\n}\n\nexport async function facets(\n client: RegistryBrokerClient,\n adapter?: string,\n): Promise<SearchFacetsResponse> {\n const params = new URLSearchParams();\n if (adapter) {\n params.set('adapter', adapter);\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n const raw = await client.requestJson<JsonValue>(`/search/facets${suffix}`, {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n searchFacetsResponseSchema,\n 'search facets response',\n );\n}\n"],"names":[],"mappings":"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"}