@hashgraphonline/standards-sdk 0.1.183 → 0.1.185

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 (289) hide show
  1. package/dist/browser/hcs-25/identifiers.d.ts +24 -0
  2. package/dist/browser/hcs-25/identifiers.d.ts.map +1 -0
  3. package/dist/browser/hcs-25/index.d.ts +4 -0
  4. package/dist/browser/hcs-25/index.d.ts.map +1 -0
  5. package/dist/browser/hcs-25/scoring.d.ts +32 -0
  6. package/dist/browser/hcs-25/scoring.d.ts.map +1 -0
  7. package/dist/browser/hcs-25/types.d.ts +363 -0
  8. package/dist/browser/hcs-25/types.d.ts.map +1 -0
  9. package/dist/browser/index.d.ts +1 -0
  10. package/dist/browser/index.d.ts.map +1 -1
  11. package/dist/browser/services/registry-broker/index.d.ts +1 -0
  12. package/dist/browser/services/registry-broker/index.d.ts.map +1 -1
  13. package/dist/browser/services/registry-broker/schemas.d.ts +6 -0
  14. package/dist/browser/services/registry-broker/schemas.d.ts.map +1 -1
  15. package/dist/browser/services/registry-broker/types.d.ts +7 -1
  16. package/dist/browser/services/registry-broker/types.d.ts.map +1 -1
  17. package/dist/browser/standards-sdk.browser.js.map +1 -1
  18. package/dist/browser-root/hcs-25/identifiers.d.ts +24 -0
  19. package/dist/browser-root/hcs-25/identifiers.d.ts.map +1 -0
  20. package/dist/browser-root/hcs-25/index.d.ts +4 -0
  21. package/dist/browser-root/hcs-25/index.d.ts.map +1 -0
  22. package/dist/browser-root/hcs-25/scoring.d.ts +32 -0
  23. package/dist/browser-root/hcs-25/scoring.d.ts.map +1 -0
  24. package/dist/browser-root/hcs-25/types.d.ts +363 -0
  25. package/dist/browser-root/hcs-25/types.d.ts.map +1 -0
  26. package/dist/browser-root/index.d.ts +1 -0
  27. package/dist/browser-root/index.d.ts.map +1 -1
  28. package/dist/browser-root/services/registry-broker/index.d.ts +1 -0
  29. package/dist/browser-root/services/registry-broker/index.d.ts.map +1 -1
  30. package/dist/browser-root/services/registry-broker/schemas.d.ts +6 -0
  31. package/dist/browser-root/services/registry-broker/schemas.d.ts.map +1 -1
  32. package/dist/browser-root/services/registry-broker/types.d.ts +7 -1
  33. package/dist/browser-root/services/registry-broker/types.d.ts.map +1 -1
  34. package/dist/browser-root/standards-sdk.root-browser.js +8 -1
  35. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  36. package/dist/cjs/hcs-25/identifiers.d.ts +24 -0
  37. package/dist/cjs/hcs-25/identifiers.d.ts.map +1 -0
  38. package/dist/cjs/hcs-25/index.d.ts +4 -0
  39. package/dist/cjs/hcs-25/index.d.ts.map +1 -0
  40. package/dist/cjs/hcs-25/scoring.d.ts +32 -0
  41. package/dist/cjs/hcs-25/scoring.d.ts.map +1 -0
  42. package/dist/cjs/hcs-25/types.d.ts +363 -0
  43. package/dist/cjs/hcs-25/types.d.ts.map +1 -0
  44. package/dist/cjs/index.d.ts +1 -0
  45. package/dist/cjs/index.d.ts.map +1 -1
  46. package/dist/cjs/services/registry-broker/index.d.ts +1 -0
  47. package/dist/cjs/services/registry-broker/index.d.ts.map +1 -1
  48. package/dist/cjs/services/registry-broker/schemas.d.ts +6 -0
  49. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  50. package/dist/cjs/services/registry-broker/types.d.ts +7 -1
  51. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  52. package/dist/cjs/standards-sdk.cjs +2 -2
  53. package/dist/cjs/standards-sdk.cjs.map +1 -1
  54. package/dist/es/hcs-25/identifiers.d.ts +24 -0
  55. package/dist/es/hcs-25/identifiers.d.ts.map +1 -0
  56. package/dist/es/hcs-25/index.d.ts +4 -0
  57. package/dist/es/hcs-25/index.d.ts.map +1 -0
  58. package/dist/es/hcs-25/scoring.d.ts +32 -0
  59. package/dist/es/hcs-25/scoring.d.ts.map +1 -0
  60. package/dist/es/hcs-25/types.d.ts +363 -0
  61. package/dist/es/hcs-25/types.d.ts.map +1 -0
  62. package/dist/es/index.d.ts +1 -0
  63. package/dist/es/index.d.ts.map +1 -1
  64. package/dist/es/services/registry-broker/index.d.ts +1 -0
  65. package/dist/es/services/registry-broker/index.d.ts.map +1 -1
  66. package/dist/es/services/registry-broker/schemas.d.ts +6 -0
  67. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  68. package/dist/es/services/registry-broker/types.d.ts +7 -1
  69. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  70. package/dist/es/standards-sdk.es.js +69 -39
  71. package/dist/es/standards-sdk.es.js.map +1 -1
  72. package/dist/es/standards-sdk.es101.js +2 -2
  73. package/dist/es/standards-sdk.es103.js +2 -2
  74. package/dist/es/standards-sdk.es104.js +1 -1
  75. package/dist/es/standards-sdk.es106.js +1 -1
  76. package/dist/es/standards-sdk.es108.js +2 -2
  77. package/dist/es/standards-sdk.es11.js +1 -1
  78. package/dist/es/standards-sdk.es110.js +1 -1
  79. package/dist/es/standards-sdk.es111.js +2 -2
  80. package/dist/es/standards-sdk.es115.js +3 -3
  81. package/dist/es/standards-sdk.es116.js +4 -4
  82. package/dist/es/standards-sdk.es117.js +19 -251
  83. package/dist/es/standards-sdk.es117.js.map +1 -1
  84. package/dist/es/standards-sdk.es118.js +60 -475
  85. package/dist/es/standards-sdk.es118.js.map +1 -1
  86. package/dist/es/standards-sdk.es119.js +217 -86
  87. package/dist/es/standards-sdk.es119.js.map +1 -1
  88. package/dist/es/standards-sdk.es12.js +1 -1
  89. package/dist/es/standards-sdk.es120.js +242 -150
  90. package/dist/es/standards-sdk.es120.js.map +1 -1
  91. package/dist/es/standards-sdk.es121.js +470 -26
  92. package/dist/es/standards-sdk.es121.js.map +1 -1
  93. package/dist/es/standards-sdk.es122.js +103 -10
  94. package/dist/es/standards-sdk.es122.js.map +1 -1
  95. package/dist/es/standards-sdk.es123.js +145 -167
  96. package/dist/es/standards-sdk.es123.js.map +1 -1
  97. package/dist/es/standards-sdk.es124.js +30 -25
  98. package/dist/es/standards-sdk.es124.js.map +1 -1
  99. package/dist/es/standards-sdk.es125.js +10 -20
  100. package/dist/es/standards-sdk.es125.js.map +1 -1
  101. package/dist/es/standards-sdk.es126.js +159 -137
  102. package/dist/es/standards-sdk.es126.js.map +1 -1
  103. package/dist/es/standards-sdk.es127.js +27 -199
  104. package/dist/es/standards-sdk.es127.js.map +1 -1
  105. package/dist/es/standards-sdk.es128.js +15 -783
  106. package/dist/es/standards-sdk.es128.js.map +1 -1
  107. package/dist/es/standards-sdk.es129.js +157 -10
  108. package/dist/es/standards-sdk.es129.js.map +1 -1
  109. package/dist/es/standards-sdk.es13.js +1 -1
  110. package/dist/es/standards-sdk.es130.js +198 -564
  111. package/dist/es/standards-sdk.es130.js.map +1 -1
  112. package/dist/es/standards-sdk.es131.js +703 -539
  113. package/dist/es/standards-sdk.es131.js.map +1 -1
  114. package/dist/es/standards-sdk.es132.js +12 -12
  115. package/dist/es/standards-sdk.es132.js.map +1 -1
  116. package/dist/es/standards-sdk.es133.js +567 -2
  117. package/dist/es/standards-sdk.es133.js.map +1 -1
  118. package/dist/es/standards-sdk.es134.js +610 -71
  119. package/dist/es/standards-sdk.es134.js.map +1 -1
  120. package/dist/es/standards-sdk.es135.js +12 -39
  121. package/dist/es/standards-sdk.es135.js.map +1 -1
  122. package/dist/es/standards-sdk.es136.js +2 -2
  123. package/dist/es/standards-sdk.es136.js.map +1 -1
  124. package/dist/es/standards-sdk.es137.js +42 -190
  125. package/dist/es/standards-sdk.es137.js.map +1 -1
  126. package/dist/es/standards-sdk.es138.js +39 -1139
  127. package/dist/es/standards-sdk.es138.js.map +1 -1
  128. package/dist/es/standards-sdk.es139.js +2 -306
  129. package/dist/es/standards-sdk.es139.js.map +1 -1
  130. package/dist/es/standards-sdk.es14.js +1 -1
  131. package/dist/es/standards-sdk.es140.js +231 -418
  132. package/dist/es/standards-sdk.es140.js.map +1 -1
  133. package/dist/es/standards-sdk.es141.js +1135 -350
  134. package/dist/es/standards-sdk.es141.js.map +1 -1
  135. package/dist/es/standards-sdk.es142.js +268 -1084
  136. package/dist/es/standards-sdk.es142.js.map +1 -1
  137. package/dist/es/standards-sdk.es143.js +418 -204
  138. package/dist/es/standards-sdk.es143.js.map +1 -1
  139. package/dist/es/standards-sdk.es144.js +350 -1562
  140. package/dist/es/standards-sdk.es144.js.map +1 -1
  141. package/dist/es/standards-sdk.es145.js +1061 -1096
  142. package/dist/es/standards-sdk.es145.js.map +1 -1
  143. package/dist/es/standards-sdk.es146.js +204 -13
  144. package/dist/es/standards-sdk.es146.js.map +1 -1
  145. package/dist/es/standards-sdk.es147.js +1541 -233
  146. package/dist/es/standards-sdk.es147.js.map +1 -1
  147. package/dist/es/standards-sdk.es148.js +1157 -4
  148. package/dist/es/standards-sdk.es148.js.map +1 -1
  149. package/dist/es/standards-sdk.es149.js +15 -79
  150. package/dist/es/standards-sdk.es149.js.map +1 -1
  151. package/dist/es/standards-sdk.es15.js +1 -1
  152. package/dist/es/standards-sdk.es150.js +250 -78
  153. package/dist/es/standards-sdk.es150.js.map +1 -1
  154. package/dist/es/standards-sdk.es151.js +4 -60
  155. package/dist/es/standards-sdk.es151.js.map +1 -1
  156. package/dist/es/standards-sdk.es152.js +75 -153
  157. package/dist/es/standards-sdk.es152.js.map +1 -1
  158. package/dist/es/standards-sdk.es153.js +87 -7
  159. package/dist/es/standards-sdk.es153.js.map +1 -1
  160. package/dist/es/standards-sdk.es154.js +54 -80
  161. package/dist/es/standards-sdk.es154.js.map +1 -1
  162. package/dist/es/standards-sdk.es155.js +2547 -65
  163. package/dist/es/standards-sdk.es155.js.map +1 -1
  164. package/dist/es/standards-sdk.es156.js +159 -30
  165. package/dist/es/standards-sdk.es156.js.map +1 -1
  166. package/dist/es/standards-sdk.es157.js +7 -34
  167. package/dist/es/standards-sdk.es157.js.map +1 -1
  168. package/dist/es/standards-sdk.es158.js +86 -48
  169. package/dist/es/standards-sdk.es158.js.map +1 -1
  170. package/dist/es/standards-sdk.es159.js +52 -125
  171. package/dist/es/standards-sdk.es159.js.map +1 -1
  172. package/dist/es/standards-sdk.es16.js +5 -5
  173. package/dist/es/standards-sdk.es160.js +30 -42
  174. package/dist/es/standards-sdk.es160.js.map +1 -1
  175. package/dist/es/standards-sdk.es161.js +32 -2538
  176. package/dist/es/standards-sdk.es161.js.map +1 -1
  177. package/dist/es/standards-sdk.es162.js +48 -12482
  178. package/dist/es/standards-sdk.es162.js.map +1 -1
  179. package/dist/es/standards-sdk.es163.js +12479 -53
  180. package/dist/es/standards-sdk.es163.js.map +1 -1
  181. package/dist/es/standards-sdk.es164.js +124 -97
  182. package/dist/es/standards-sdk.es164.js.map +1 -1
  183. package/dist/es/standards-sdk.es165.js +35 -74
  184. package/dist/es/standards-sdk.es165.js.map +1 -1
  185. package/dist/es/standards-sdk.es166.js +14 -197
  186. package/dist/es/standards-sdk.es166.js.map +1 -1
  187. package/dist/es/standards-sdk.es167.js +54 -15
  188. package/dist/es/standards-sdk.es167.js.map +1 -1
  189. package/dist/es/standards-sdk.es168.js +96 -58
  190. package/dist/es/standards-sdk.es168.js.map +1 -1
  191. package/dist/es/standards-sdk.es169.js +69 -660
  192. package/dist/es/standards-sdk.es169.js.map +1 -1
  193. package/dist/es/standards-sdk.es170.js +188 -160
  194. package/dist/es/standards-sdk.es170.js.map +1 -1
  195. package/dist/es/standards-sdk.es171.js +657 -307
  196. package/dist/es/standards-sdk.es171.js.map +1 -1
  197. package/dist/es/standards-sdk.es172.js +64 -337
  198. package/dist/es/standards-sdk.es172.js.map +1 -1
  199. package/dist/es/standards-sdk.es173.js +129 -410
  200. package/dist/es/standards-sdk.es173.js.map +1 -1
  201. package/dist/es/standards-sdk.es174.js +200 -209
  202. package/dist/es/standards-sdk.es174.js.map +1 -1
  203. package/dist/es/standards-sdk.es175.js +334 -64
  204. package/dist/es/standards-sdk.es175.js.map +1 -1
  205. package/dist/es/standards-sdk.es176.js +438 -124
  206. package/dist/es/standards-sdk.es176.js.map +1 -1
  207. package/dist/es/standards-sdk.es177.js +310 -496
  208. package/dist/es/standards-sdk.es177.js.map +1 -1
  209. package/dist/es/standards-sdk.es178.js +60 -243
  210. package/dist/es/standards-sdk.es178.js.map +1 -1
  211. package/dist/es/standards-sdk.es179.js +118 -175
  212. package/dist/es/standards-sdk.es179.js.map +1 -1
  213. package/dist/es/standards-sdk.es18.js +12 -12
  214. package/dist/es/standards-sdk.es180.js +465 -67
  215. package/dist/es/standards-sdk.es180.js.map +1 -1
  216. package/dist/es/standards-sdk.es181.js +250 -143
  217. package/dist/es/standards-sdk.es181.js.map +1 -1
  218. package/dist/es/standards-sdk.es182.js +172 -160
  219. package/dist/es/standards-sdk.es182.js.map +1 -1
  220. package/dist/es/standards-sdk.es183.js +65 -630
  221. package/dist/es/standards-sdk.es183.js.map +1 -1
  222. package/dist/es/standards-sdk.es184.js +128 -161
  223. package/dist/es/standards-sdk.es184.js.map +1 -1
  224. package/dist/es/standards-sdk.es185.js +144 -195
  225. package/dist/es/standards-sdk.es185.js.map +1 -1
  226. package/dist/es/standards-sdk.es186.js +668 -223
  227. package/dist/es/standards-sdk.es186.js.map +1 -1
  228. package/dist/es/standards-sdk.es187.js +188 -0
  229. package/dist/es/standards-sdk.es187.js.map +1 -0
  230. package/dist/es/standards-sdk.es188.js +238 -0
  231. package/dist/es/standards-sdk.es188.js.map +1 -0
  232. package/dist/es/standards-sdk.es189.js +242 -0
  233. package/dist/es/standards-sdk.es189.js.map +1 -0
  234. package/dist/es/standards-sdk.es19.js +9 -9
  235. package/dist/es/standards-sdk.es2.js +2 -2
  236. package/dist/es/standards-sdk.es20.js +1 -1
  237. package/dist/es/standards-sdk.es21.js +1 -1
  238. package/dist/es/standards-sdk.es22.js +1 -1
  239. package/dist/es/standards-sdk.es23.js +1 -1
  240. package/dist/es/standards-sdk.es24.js +1 -1
  241. package/dist/es/standards-sdk.es25.js +1 -1
  242. package/dist/es/standards-sdk.es26.js +1 -1
  243. package/dist/es/standards-sdk.es27.js +12 -12
  244. package/dist/es/standards-sdk.es30.js +2 -2
  245. package/dist/es/standards-sdk.es31.js +4 -4
  246. package/dist/es/standards-sdk.es32.js +1 -1
  247. package/dist/es/standards-sdk.es35.js +6 -6
  248. package/dist/es/standards-sdk.es36.js +4 -4
  249. package/dist/es/standards-sdk.es37.js +2 -2
  250. package/dist/es/standards-sdk.es38.js +2 -2
  251. package/dist/es/standards-sdk.es39.js +1 -1
  252. package/dist/es/standards-sdk.es4.js +2 -2
  253. package/dist/es/standards-sdk.es40.js +1 -1
  254. package/dist/es/standards-sdk.es41.js +2 -2
  255. package/dist/es/standards-sdk.es46.js +1 -1
  256. package/dist/es/standards-sdk.es5.js +2 -2
  257. package/dist/es/standards-sdk.es51.js +1 -1
  258. package/dist/es/standards-sdk.es53.js +1 -1
  259. package/dist/es/standards-sdk.es56.js +2 -2
  260. package/dist/es/standards-sdk.es59.js +1 -1
  261. package/dist/es/standards-sdk.es6.js +2 -2
  262. package/dist/es/standards-sdk.es60.js +1 -1
  263. package/dist/es/standards-sdk.es62.js +1 -1
  264. package/dist/es/standards-sdk.es63.js +2 -2
  265. package/dist/es/standards-sdk.es64.js +1 -1
  266. package/dist/es/standards-sdk.es65.js +1 -1
  267. package/dist/es/standards-sdk.es66.js +1 -1
  268. package/dist/es/standards-sdk.es67.js +7 -7
  269. package/dist/es/standards-sdk.es69.js +1 -1
  270. package/dist/es/standards-sdk.es7.js +1 -1
  271. package/dist/es/standards-sdk.es71.js +2 -2
  272. package/dist/es/standards-sdk.es72.js +3 -3
  273. package/dist/es/standards-sdk.es75.js +5 -5
  274. package/dist/es/standards-sdk.es76.js +3 -3
  275. package/dist/es/standards-sdk.es77.js +2 -2
  276. package/dist/es/standards-sdk.es78.js +1 -1
  277. package/dist/es/standards-sdk.es81.js +2 -2
  278. package/dist/es/standards-sdk.es83.js +2 -2
  279. package/dist/es/standards-sdk.es84.js +4 -4
  280. package/dist/es/standards-sdk.es85.js +1 -1
  281. package/dist/es/standards-sdk.es88.js +1 -1
  282. package/dist/es/standards-sdk.es89.js +2 -2
  283. package/dist/es/standards-sdk.es9.js +2 -2
  284. package/dist/es/standards-sdk.es90.js +4 -4
  285. package/dist/es/standards-sdk.es94.js +3 -3
  286. package/dist/es/standards-sdk.es96.js +2 -2
  287. package/dist/es/standards-sdk.es98.js +1 -1
  288. package/dist/es/standards-sdk.es99.js +3 -3
  289. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es145.js","sources":["../../src/services/registry-broker/client/base-client.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { secp256k1 } from '@noble/curves/secp256k1.js';\nimport { ZodError, z } from 'zod';\nimport type {\n AgentFeedbackEligibilityRequest,\n AgentFeedbackEligibilityResponse,\n AgentFeedbackIndexResponse,\n AgentFeedbackEntriesIndexResponse,\n AgentFeedbackQuery,\n AgentFeedbackResponse,\n AgentFeedbackSubmissionRequest,\n AgentFeedbackSubmissionResponse,\n AutoTopUpOptions,\n ClientEncryptionOptions,\n CreateSessionRequestPayload,\n DeriveSharedSecretOptions,\n DecryptCipherEnvelopeOptions,\n EncryptCipherEnvelopeOptions,\n EphemeralKeyPair,\n HistoryAutoTopUpOptions,\n HbarPurchaseIntentRequest,\n HbarPurchaseIntentResponse,\n InitializeAgentClientOptions,\n JsonObject,\n JsonValue,\n RegisterAgentResponse,\n RegisterAgentPartialResponse,\n RegisterAgentPendingResponse,\n RegisterAgentSuccessResponse,\n RegistryBrokerClientOptions,\n AcceptConversationOptions,\n AcceptEncryptedChatSessionOptions,\n AdapterDetailsResponse,\n AdapterRegistryAdaptersResponse,\n AdapterRegistryCategoriesResponse,\n AdapterRegistryCategory,\n AdapterRegistrySubmitAdapterAcceptedResponse,\n AdapterRegistrySubmissionStatusResponse,\n AdaptersResponse,\n AdditionalRegistryCatalogResponse,\n AgentAuthConfig,\n AgentRegistrationRequest,\n ChatConversationHandle,\n ChatHistoryCompactionResponse,\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n ChatReadinessRequestPayload,\n ChatReadinessResponse,\n ChatRetryRequestPayload,\n ChatRetryResponse,\n ChatSessionEndResponse,\n ChatSessionResumeResponse,\n CipherEnvelope,\n CompactHistoryRequestPayload,\n CreateAdapterRegistryCategoryRequest,\n CreateSessionResponse,\n CreditBalanceResponse,\n CreditProvidersResponse,\n GuardBalanceResponse,\n GuardFeedResponse,\n GuardOverviewResponse,\n GuardPolicy,\n GuardAlertPreferences,\n GuardAlertPreferencesUpdate,\n GuardAbomResponse,\n GuardArtifactTimelineResponse,\n GuardDeviceListResponse,\n GuardExceptionListResponse,\n GuardExceptionUpsert,\n GuardInventoryDiffResponse,\n GuardInventoryResponse,\n GuardPainSignalAggregateResponse,\n GuardPainSignalIngestItem,\n GuardPainSignalListResponse,\n GuardPreflightRequest,\n GuardPreflightVerdictResponse,\n GuardReceiptExportResponse,\n GuardReceiptHistoryResponse,\n GuardReceiptSyncPayload,\n GuardReceiptSyncResponse,\n GuardRevocationResponse,\n GuardSessionResponse,\n GuardTeamPolicyPack,\n GuardTeamPolicyPackUpdate,\n GuardTrustByHashResponse,\n GuardTrustResolveQuery,\n GuardTrustResolveResponse,\n GuardWatchlistLookupResponse,\n GuardWatchlistResponse,\n GuardWatchlistUpsert,\n CreditPurchaseResponse,\n DashboardStatsResponse,\n DelegationPlanRequest,\n DelegationPlanResponse,\n DetectProtocolResponse,\n EncryptionHandshakeRecord,\n EncryptionHandshakeSubmissionPayload,\n EncryptedChatSessionHandle,\n EnsureAgentKeyOptions,\n LedgerAuthenticationOptions,\n LedgerChallengeRequest,\n LedgerChallengeResponse,\n LedgerCredentialAuthOptions,\n LedgerVerifyRequest,\n LedgerVerifyResponse,\n MetricsSummaryResponse,\n MoltbookOwnerRegistrationUpdateRequest,\n MoltbookOwnerRegistrationUpdateResponse,\n PopularSearchesResponse,\n ProtocolDetectionMessage,\n ProtocolsResponse,\n RegisterAgentOptions,\n RegisterAgentQuoteResponse,\n RegisterEncryptionKeyPayload,\n RegisterEncryptionKeyResponse,\n RegistriesResponse,\n RegisterStatusResponse,\n RegistrationProgressRecord,\n RegistrationProgressWaitOptions,\n RegistrySearchByNamespaceResponse,\n RegistryStatsResponse,\n ResolvedAgentResponse,\n SearchFacetsResponse,\n SearchParams,\n SearchResult,\n SearchStatusResponse,\n SendMessageRequestPayload,\n SendMessageResponse,\n SessionEncryptionStatusResponse,\n SessionEncryptionSummary,\n SharedSecretInput,\n StartChatOptions,\n StartConversationOptions,\n StartEncryptedChatSessionOptions,\n SubmitAdapterRegistryAdapterRequest,\n UaidConnectionStatus,\n UaidValidationResponse,\n VectorSearchRequest,\n VectorSearchResponse,\n WebsocketStatsResponse,\n VerificationChallengeDetailsResponse,\n VerificationChallengeResponse,\n VerificationDnsStatusQuery,\n VerificationDnsStatusResponse,\n VerificationDnsVerifyRequest,\n VerificationOwnershipResponse,\n VerificationStatusResponse,\n VerificationVerifyResponse,\n VerificationVerifySenderResponse,\n X402MinimumsResponse,\n SkillRegistryConfigResponse,\n SkillBadgeQuery,\n SkillBadgeResponse,\n SkillCatalogQueryOptions,\n SkillCatalogResponse,\n SkillDeprecationRecord,\n SkillDeprecationSetRequest,\n SkillDeprecationsResponse,\n SkillRegistryJobStatusResponse,\n SkillListOptions,\n SkillRegistryListResponse,\n SkillRegistryCategoriesResponse,\n SkillRegistryMineResponse,\n SkillRegistryMyListResponse,\n SkillRegistryOwnershipResponse,\n SkillRegistryPublishRequest,\n SkillRegistryPublishResponse,\n SkillRegistryQuoteRequest,\n SkillRegistryQuoteResponse,\n SkillQuotePreviewRequest,\n SkillQuotePreviewResponse,\n SkillRegistryTagsResponse,\n SkillRegistryVoteRequest,\n SkillRegistryVoteStatusResponse,\n SkillStatusRequest,\n SkillStatusResponse,\n SkillPreviewByRepoRequest,\n SkillPreviewLookupRequest,\n SkillPreviewLookupResponse,\n SkillPreviewRecord,\n SkillConversionSignalsResponse,\n UploadSkillPreviewFromGithubOidcRequest,\n SkillInstallResponse,\n SkillInstallCopyTelemetryRequest,\n SkillInstallCopyTelemetryResponse,\n SkillSecurityBreakdownRequest,\n SkillSecurityBreakdownResponse,\n SkillRecommendedVersionResponse,\n SkillRecommendedVersionSetRequest,\n SkillResolverManifestResponse,\n SkillRegistryVersionsResponse,\n SkillVerificationDomainProofChallengeRequest,\n SkillVerificationDomainProofChallengeResponse,\n SkillVerificationDomainProofVerifyRequest,\n SkillVerificationDomainProofVerifyResponse,\n SkillVerificationRequestCreateRequest,\n SkillVerificationRequestCreateResponse,\n SkillVerificationStatusResponse,\n} from '../types';\nimport {\n agentFeedbackEligibilityResponseSchema,\n agentFeedbackEntriesIndexResponseSchema,\n agentFeedbackIndexResponseSchema,\n agentFeedbackResponseSchema,\n agentFeedbackSubmissionResponseSchema,\n registerAgentResponseSchema,\n} from '../schemas';\nimport type {\n ConversationContextInput,\n ConversationContextState,\n} from './chat-history';\nimport {\n attachDecryptedHistory as attachDecryptedHistoryImpl,\n decryptHistoryEntryFromContext as decryptHistoryEntryFromContextImpl,\n fetchHistorySnapshot as fetchHistorySnapshotImpl,\n registerConversationContextForEncryption as registerConversationContextForEncryptionImpl,\n resolveDecryptionContext as resolveDecryptionContextImpl,\n} from './chat-history';\nimport type { RegistryBrokerChatApi } from './chat';\nimport {\n acceptConversation as acceptConversationImpl,\n cancelSession as cancelSessionImpl,\n checkChatReadiness as checkChatReadinessImpl,\n compactHistory as compactHistoryImpl,\n createChatApi,\n createPlaintextConversationHandle as createPlaintextConversationHandleImpl,\n createSession as createSessionImpl,\n endSession as endSessionImpl,\n fetchEncryptionStatus as fetchEncryptionStatusImpl,\n postEncryptionHandshake as postEncryptionHandshakeImpl,\n retryMessage as retryMessageImpl,\n resumeSession as resumeSessionImpl,\n sendMessage as sendMessageImpl,\n startChat as startChatImpl,\n startConversation as startConversationImpl,\n} from './chat';\nimport { EncryptedChatManager } from './encrypted-chat-manager';\nimport type { RegistryBrokerEncryptionApi } from './encryption';\nimport {\n bootstrapEncryptionOptions as bootstrapEncryptionOptionsImpl,\n createEncryptionApi,\n generateEncryptionKeyPair as generateEncryptionKeyPairImpl,\n} from './encryption';\nimport {\n adapters as adaptersImpl,\n adaptersDetailed as adaptersDetailedImpl,\n adapterRegistryAdapters as adapterRegistryAdaptersImpl,\n adapterRegistryCategories as adapterRegistryCategoriesImpl,\n adapterRegistrySubmissionStatus as adapterRegistrySubmissionStatusImpl,\n createAdapterRegistryCategory as createAdapterRegistryCategoryImpl,\n submitAdapterRegistryAdapter as submitAdapterRegistryAdapterImpl,\n} from './adapters';\nimport {\n closeUaidConnection as closeUaidConnectionImpl,\n dashboardStats as dashboardStatsImpl,\n getRegistrationProgress as getRegistrationProgressImpl,\n getRegistrationQuote as getRegistrationQuoteImpl,\n getUaidConnectionStatus as getUaidConnectionStatusImpl,\n resolveUaid as resolveUaidImpl,\n updateAgent as updateAgentImpl,\n validateUaid as validateUaidImpl,\n waitForRegistrationCompletion as waitForRegistrationCompletionImpl,\n} from './agents';\nimport {\n createVerificationChallenge as createVerificationChallengeImpl,\n getRegisterStatus as getRegisterStatusImpl,\n getVerificationChallenge as getVerificationChallengeImpl,\n getVerificationDnsStatus as getVerificationDnsStatusImpl,\n getVerificationOwnership as getVerificationOwnershipImpl,\n getVerificationStatus as getVerificationStatusImpl,\n registerOwnedMoltbookAgent as registerOwnedMoltbookAgentImpl,\n verifyUaidDnsTxt as verifyUaidDnsTxtImpl,\n verifySenderOwnership as verifySenderOwnershipImpl,\n verifyVerificationChallenge as verifyVerificationChallengeImpl,\n} from './verification';\nimport type {\n BuyCreditsWithX402Params,\n PurchaseCreditsWithX402Params,\n X402PurchaseResult,\n} from './credits';\nimport {\n createHbarPurchaseIntent as createHbarPurchaseIntentImpl,\n getCreditProviders as getCreditProvidersImpl,\n getCreditsBalance as getCreditsBalanceImpl,\n buyCreditsWithX402 as buyCreditsWithX402Impl,\n getX402Minimums as getX402MinimumsImpl,\n purchaseCreditsWithHbar as purchaseCreditsWithHbarImpl,\n purchaseCreditsWithX402 as purchaseCreditsWithX402Impl,\n} from './credits';\nimport {\n exportGuardReceipts as exportGuardReceiptsImpl,\n exportGuardAbom as exportGuardAbomImpl,\n exportGuardArtifactAbom as exportGuardArtifactAbomImpl,\n addGuardWatchlistItem as addGuardWatchlistItemImpl,\n addGuardException as addGuardExceptionImpl,\n fetchGuardAdvisories as fetchGuardAdvisoriesImpl,\n fetchGuardPolicy as fetchGuardPolicyImpl,\n getGuardBillingBalance as getGuardBillingBalanceImpl,\n getGuardFeed as getGuardFeedImpl,\n getGuardOverview as getGuardOverviewImpl,\n getGuardReceiptHistory as getGuardReceiptHistoryImpl,\n getGuardArtifactTimeline as getGuardArtifactTimelineImpl,\n getGuardAlertPreferences as getGuardAlertPreferencesImpl,\n getGuardDevices as getGuardDevicesImpl,\n getGuardEntitlements as getGuardEntitlementsImpl,\n getGuardExceptions as getGuardExceptionsImpl,\n getGuardInventoryDiff as getGuardInventoryDiffImpl,\n getGuardInventory as getGuardInventoryImpl,\n getGuardPainSignals as getGuardPainSignalsImpl,\n getGuardAggregatedPainSignals as getGuardAggregatedPainSignalsImpl,\n getGuardPreExecutionVerdict as getGuardPreExecutionVerdictImpl,\n getGuardPreInstallVerdict as getGuardPreInstallVerdictImpl,\n getGuardRevocations as getGuardRevocationsImpl,\n getGuardSession as getGuardSessionImpl,\n getGuardTeamPolicyPack as getGuardTeamPolicyPackImpl,\n getGuardTrustByHash as getGuardTrustByHashImpl,\n getGuardWatchlist as getGuardWatchlistImpl,\n lookupGuardWatchlist as lookupGuardWatchlistImpl,\n requestGuardException as requestGuardExceptionImpl,\n removeGuardException as removeGuardExceptionImpl,\n removeGuardWatchlistItem as removeGuardWatchlistItemImpl,\n resolveGuardTrust as resolveGuardTrustImpl,\n ingestGuardPainSignals as ingestGuardPainSignalsImpl,\n submitGuardReceipts as submitGuardReceiptsImpl,\n syncGuardInventory as syncGuardInventoryImpl,\n syncGuardReceipts as syncGuardReceiptsImpl,\n updateGuardAlertPreferences as updateGuardAlertPreferencesImpl,\n updateGuardTeamPolicyPack as updateGuardTeamPolicyPackImpl,\n} from './guard';\nimport {\n authenticateWithLedger as authenticateWithLedgerImpl,\n authenticateWithLedgerCredentials as authenticateWithLedgerCredentialsImpl,\n createLedgerChallenge as createLedgerChallengeImpl,\n verifyLedgerChallenge as verifyLedgerChallengeImpl,\n} from './ledger-auth';\nimport {\n delegate as delegateImpl,\n detectProtocol as detectProtocolImpl,\n facets as facetsImpl,\n getAdditionalRegistries as getAdditionalRegistriesImpl,\n listProtocols as listProtocolsImpl,\n metricsSummary as metricsSummaryImpl,\n popularSearches as popularSearchesImpl,\n registries as registriesImpl,\n registrySearchByNamespace as registrySearchByNamespaceImpl,\n search as searchImpl,\n searchStatus as searchStatusImpl,\n stats as statsImpl,\n vectorSearch as vectorSearchImpl,\n websocketStats as websocketStatsImpl,\n} from './search';\nimport {\n createSkillDomainProofChallenge as createSkillDomainProofChallengeImpl,\n getRecommendedSkillVersion as getRecommendedSkillVersionImpl,\n getSkillBadge as getSkillBadgeImpl,\n getSkillDeprecations as getSkillDeprecationsImpl,\n getSkillInstall as getSkillInstallImpl,\n getSkillOwnership as getSkillOwnershipImpl,\n getSkillPublishJob as getSkillPublishJobImpl,\n getSkillConversionSignalsByRepo as getSkillConversionSignalsByRepoImpl,\n getSkillPreviewById as getSkillPreviewByIdImpl,\n getSkillPreviewByRepo as getSkillPreviewByRepoImpl,\n getSkillPreview as getSkillPreviewImpl,\n getSkillStatusByRepo as getSkillStatusByRepoImpl,\n getSkillStatus as getSkillStatusImpl,\n getSkillVerificationStatus as getSkillVerificationStatusImpl,\n getSkillVoteStatus as getSkillVoteStatusImpl,\n getSkillSecurityBreakdown as getSkillSecurityBreakdownImpl,\n getSkillsCatalog as getSkillsCatalogImpl,\n getMySkillsList as getMySkillsListImpl,\n listSkillCategories as listSkillCategoriesImpl,\n listSkillTags as listSkillTagsImpl,\n listSkills as listSkillsImpl,\n listMySkills as listMySkillsImpl,\n listSkillVersions as listSkillVersionsImpl,\n publishSkill as publishSkillImpl,\n quoteSkillPublishPreview as quoteSkillPublishPreviewImpl,\n quoteSkillPublish as quoteSkillPublishImpl,\n resolveSkillManifest as resolveSkillManifestImpl,\n resolveSkillMarkdown as resolveSkillMarkdownImpl,\n requestSkillVerification as requestSkillVerificationImpl,\n recordSkillInstallCopy as recordSkillInstallCopyImpl,\n setRecommendedSkillVersion as setRecommendedSkillVersionImpl,\n setSkillDeprecation as setSkillDeprecationImpl,\n setSkillVote as setSkillVoteImpl,\n skillsConfig as skillsConfigImpl,\n uploadSkillPreviewFromGithubOidc as uploadSkillPreviewFromGithubOidcImpl,\n verifySkillDomainProof as verifySkillDomainProofImpl,\n} from './skills';\nimport {\n createAbortError,\n DEFAULT_BASE_URL,\n DEFAULT_HISTORY_TOP_UP_HBAR,\n DEFAULT_USER_AGENT,\n JSON_CONTENT_TYPE,\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n isJsonObject,\n isBrowserRuntime,\n normaliseBaseUrl,\n normaliseHeaderName,\n serialiseAgentRegistrationRequest,\n} from './utils';\nimport {\n RegistryBrokerError,\n RegistryBrokerParseError,\n type ErrorDetails,\n} from './errors';\nimport { optionalImportSync } from '../../../utils/dynamic-import';\nexport interface InitializedAgentClient {\n client: RegistryBrokerClient;\n encryption?: { publicKey: string; privateKey?: string } | null;\n}\nexport interface GenerateEncryptionKeyPairOptions {\n keyType?: 'secp256k1';\n envVar?: string;\n envPath?: string;\n overwrite?: boolean;\n}\nexport interface RequestConfig {\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\ntype NodeCipher = {\n setAAD: (buffer: Buffer) => void;\n update: (buffer: Buffer) => Buffer;\n final: () => Buffer;\n getAuthTag: () => Buffer;\n};\n\ntype NodeDecipher = {\n setAAD: (buffer: Buffer) => void;\n setAuthTag: (buffer: Buffer) => void;\n update: (buffer: Buffer) => Buffer;\n final: () => Buffer;\n};\n\ntype NodeCryptoModule = {\n createCipheriv: (algorithm: string, key: Buffer, iv: Buffer) => NodeCipher;\n createDecipheriv: (\n algorithm: string,\n key: Buffer,\n iv: Buffer,\n ) => NodeDecipher;\n createHash: (algorithm: string) => {\n update: (buffer: Buffer) => { digest: () => Buffer };\n };\n randomBytes: (size: number) => Buffer;\n};\nexport class RegistryBrokerClient {\n static async initializeAgent(\n options: InitializeAgentClientOptions,\n ): Promise<InitializedAgentClient> {\n const { uaid, ensureEncryptionKey = true, ...clientOptions } = options;\n const client = new RegistryBrokerClient(clientOptions);\n let encryption: { publicKey: string; privateKey?: string } | null = null;\n if (ensureEncryptionKey) {\n const ensureOptions =\n typeof ensureEncryptionKey === 'object'\n ? ensureEncryptionKey\n : { generateIfMissing: true };\n encryption = await client.encryption.ensureAgentKey({\n uaid,\n ...ensureOptions,\n });\n }\n return { client, encryption };\n }\n readonly baseUrl: string;\n readonly fetchImpl: typeof fetch;\n readonly defaultHeaders: Record<string, string>;\n readonly registrationAutoTopUp?: AutoTopUpOptions;\n readonly historyAutoTopUp?: HistoryAutoTopUpOptions;\n readonly encryptionOptions?: ClientEncryptionOptions;\n encryptionBootstrapPromise: Promise<void> | null = null;\n private chatApi: RegistryBrokerChatApi | null = null;\n private encryptedChatManager: EncryptedChatManager | null = null;\n private encryptionApi: RegistryBrokerEncryptionApi | null = null;\n private conversationContexts = new Map<string, ConversationContextState[]>();\n constructor(options: RegistryBrokerClientOptions = {}) {\n const {\n baseUrl = DEFAULT_BASE_URL,\n fetchImplementation,\n defaultHeaders,\n apiKey,\n accountId,\n ledgerApiKey,\n registrationAutoTopUp,\n historyAutoTopUp,\n encryption,\n } = options;\n this.baseUrl = normaliseBaseUrl(baseUrl);\n const resolvedFetch =\n fetchImplementation ??\n (typeof globalThis.fetch === 'function' ? globalThis.fetch : null);\n if (!resolvedFetch) {\n throw new Error(\n 'A fetch implementation is required for RegistryBrokerClient',\n );\n }\n this.fetchImpl = resolvedFetch;\n this.defaultHeaders = {\n ...(defaultHeaders ?? {}),\n };\n Object.entries(this.defaultHeaders).forEach(([key, value]) => {\n const headerName = normaliseHeaderName(key);\n if (headerName !== key) {\n delete this.defaultHeaders[key];\n this.defaultHeaders[headerName] = value;\n }\n });\n const existingLedgerHeader =\n this.defaultHeaders['x-ledger-api-key']?.trim();\n if (!this.defaultHeaders['x-api-key'] && existingLedgerHeader) {\n this.defaultHeaders['x-api-key'] = existingLedgerHeader;\n }\n if (apiKey) {\n this.defaultHeaders['x-api-key'] = apiKey;\n }\n if (typeof accountId === 'string' && accountId.trim().length > 0) {\n this.defaultHeaders['x-account-id'] = accountId.trim();\n }\n if (ledgerApiKey) {\n if (!this.defaultHeaders['x-api-key']) {\n this.defaultHeaders['x-api-key'] = ledgerApiKey;\n }\n }\n this.registrationAutoTopUp = registrationAutoTopUp;\n this.historyAutoTopUp = historyAutoTopUp;\n this.encryptionOptions = encryption;\n\n if (this.encryptionOptions) {\n this.encryptionBootstrapPromise = this.initializeEncryptionBootstrap(\n this.encryptionOptions,\n );\n }\n }\n\n get chat(): RegistryBrokerChatApi {\n if (this.chatApi) {\n return this.chatApi;\n }\n const api = createChatApi(this, this.getEncryptedChatManager());\n this.chatApi = api;\n return api;\n }\n\n get encryption(): RegistryBrokerEncryptionApi {\n if (this.encryptionApi) {\n return this.encryptionApi;\n }\n const api = createEncryptionApi(this);\n this.encryptionApi = api;\n return api;\n }\n\n setApiKey(apiKey?: string): void {\n this.setDefaultHeader('x-api-key', apiKey);\n }\n\n setLedgerApiKey(apiKey?: string): void {\n this.setDefaultHeader('x-api-key', apiKey);\n delete this.defaultHeaders['x-ledger-api-key'];\n }\n\n setDefaultHeader(name: string, value?: string | null): void {\n if (!name || name.trim().length === 0) {\n return;\n }\n const headerName = normaliseHeaderName(name);\n if (!value || value.trim().length === 0) {\n delete this.defaultHeaders[headerName];\n return;\n }\n this.defaultHeaders[headerName] = value.trim();\n }\n\n getDefaultHeaders(): Record<string, string> {\n return { ...this.defaultHeaders };\n }\n\n async encryptionReady(): Promise<void> {\n if (!this.encryptionBootstrapPromise) {\n return;\n }\n await this.encryptionBootstrapPromise;\n }\n\n buildUrl(path: string): string {\n const normalisedPath = path.startsWith('/') ? path : `/${path}`;\n return `${this.baseUrl}${normalisedPath}`;\n }\n\n private buildRequestInit(config: RequestConfig): RequestInit {\n const headers = new Headers();\n Object.entries(this.defaultHeaders).forEach(([key, value]) => {\n headers.set(key, value);\n });\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n if (!headers.has('accept')) {\n headers.set('accept', 'application/json');\n }\n if (!headers.has('user-agent') && !isBrowserRuntime()) {\n headers.set('user-agent', DEFAULT_USER_AGENT);\n }\n\n const init: RequestInit = {\n method: config.method ?? 'GET',\n headers,\n };\n\n if (config.body !== undefined) {\n init.body = JSON.stringify(config.body);\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n }\n\n return init;\n }\n\n async request(path: string, config: RequestConfig): Promise<Response> {\n const init = this.buildRequestInit(config);\n const response = await this.fetchImpl(this.buildUrl(path), init);\n if (response.ok) {\n return response;\n }\n const errorBody = await this.extractErrorBody(response);\n throw new RegistryBrokerError('Registry broker request failed', {\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n });\n }\n\n async requestAbsolute(url: string, config: RequestConfig): Promise<Response> {\n const init = this.buildRequestInit(config);\n const response = await this.fetchImpl(url, init);\n\n if (response.ok) {\n return response;\n }\n const errorBody = await this.extractErrorBody(response);\n throw new RegistryBrokerError('Registry broker request failed', {\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n });\n }\n\n async requestJson<T extends JsonValue = JsonValue>(\n path: string,\n config: RequestConfig,\n ): Promise<T> {\n const response = await this.request(path, config);\n const contentType = response.headers?.get('content-type') ?? '';\n if (!JSON_CONTENT_TYPE.test(contentType)) {\n const body = await response.text();\n throw new RegistryBrokerParseError(\n 'Expected JSON response from registry broker',\n body,\n );\n }\n return (await response.json()) as T;\n }\n\n async requestAbsoluteJson<T extends JsonValue = JsonValue>(\n url: string,\n config: RequestConfig,\n ): Promise<T> {\n const response = await this.requestAbsolute(url, config);\n const contentType = response.headers?.get('content-type') ?? '';\n if (!JSON_CONTENT_TYPE.test(contentType)) {\n const body = await response.text();\n throw new RegistryBrokerParseError(\n 'Expected JSON response from registry broker',\n body,\n );\n }\n return (await response.json()) as T;\n }\n\n async getAgentFeedback(\n uaid: string,\n options: AgentFeedbackQuery = {},\n ): Promise<AgentFeedbackResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const query = options.includeRevoked === true ? '?includeRevoked=true' : '';\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback${query}`,\n { method: 'GET' },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackResponseSchema,\n 'agent feedback response',\n );\n }\n\n async listAgentFeedbackIndex(\n options: { page?: number; limit?: number; registries?: string[] } = {},\n ): Promise<AgentFeedbackIndexResponse> {\n const params = new URLSearchParams();\n if (typeof options.page === 'number' && Number.isFinite(options.page)) {\n params.set('page', String(Math.trunc(options.page)));\n }\n if (typeof options.limit === 'number' && Number.isFinite(options.limit)) {\n params.set('limit', String(Math.trunc(options.limit)));\n }\n if (options.registries?.length) {\n params.set('registry', options.registries.join(','));\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n\n const raw = await this.requestJson<JsonValue>(`/agents/feedback${suffix}`, {\n method: 'GET',\n });\n return this.parseWithSchema(\n raw,\n agentFeedbackIndexResponseSchema,\n 'agent feedback index response',\n );\n }\n\n async listAgentFeedbackEntriesIndex(\n options: { page?: number; limit?: number; registries?: string[] } = {},\n ): Promise<AgentFeedbackEntriesIndexResponse> {\n const params = new URLSearchParams();\n if (typeof options.page === 'number' && Number.isFinite(options.page)) {\n params.set('page', String(Math.trunc(options.page)));\n }\n if (typeof options.limit === 'number' && Number.isFinite(options.limit)) {\n params.set('limit', String(Math.trunc(options.limit)));\n }\n if (options.registries?.length) {\n params.set('registry', options.registries.join(','));\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n\n const raw = await this.requestJson<JsonValue>(\n `/agents/feedback/entries${suffix}`,\n { method: 'GET' },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackEntriesIndexResponseSchema,\n 'agent feedback entries index response',\n );\n }\n\n async checkAgentFeedbackEligibility(\n uaid: string,\n payload: AgentFeedbackEligibilityRequest,\n ): Promise<AgentFeedbackEligibilityResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback/eligibility`,\n {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackEligibilityResponseSchema,\n 'agent feedback eligibility response',\n );\n }\n\n async submitAgentFeedback(\n uaid: string,\n payload: AgentFeedbackSubmissionRequest,\n ): Promise<AgentFeedbackSubmissionResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback`,\n {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackSubmissionResponseSchema,\n 'agent feedback submission response',\n );\n }\n\n async search(params: SearchParams = {}): Promise<SearchResult> {\n return searchImpl(this, params);\n }\n\n async delegate(\n request: DelegationPlanRequest,\n ): Promise<DelegationPlanResponse> {\n return delegateImpl(this, request);\n }\n\n async searchErc8004ByAgentId(params: {\n chainId: number;\n agentId: number | bigint | string;\n limit?: number;\n page?: number;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc' | string;\n }): Promise<SearchResult> {\n const chainId = Math.floor(params.chainId);\n if (!Number.isFinite(chainId) || chainId <= 0) {\n throw new Error('chainId must be a positive integer');\n }\n\n const rawAgentId =\n typeof params.agentId === 'bigint'\n ? params.agentId.toString()\n : String(params.agentId);\n const agentId = rawAgentId.trim();\n if (!agentId) {\n throw new Error('agentId is required');\n }\n\n const nativeId = `${chainId}:${agentId}`;\n\n return searchImpl(this, {\n registries: ['erc-8004'],\n limit: params.limit ?? 1,\n ...(typeof params.page === 'number' ? { page: params.page } : {}),\n ...(typeof params.sortBy === 'string' ? { sortBy: params.sortBy } : {}),\n ...(typeof params.sortOrder === 'string'\n ? { sortOrder: params.sortOrder }\n : {}),\n metadata: {\n nativeId: [nativeId],\n networkKey: [`eip155:${chainId}`],\n },\n });\n }\n\n async stats(): Promise<RegistryStatsResponse> {\n return statsImpl(this);\n }\n\n async registries(): Promise<RegistriesResponse> {\n return registriesImpl(this);\n }\n\n async getAdditionalRegistries(): Promise<AdditionalRegistryCatalogResponse> {\n return getAdditionalRegistriesImpl(this);\n }\n\n async popularSearches(): Promise<PopularSearchesResponse> {\n return popularSearchesImpl(this);\n }\n\n async listProtocols(): Promise<ProtocolsResponse> {\n return listProtocolsImpl(this);\n }\n\n async detectProtocol(\n message: ProtocolDetectionMessage,\n ): Promise<DetectProtocolResponse> {\n return detectProtocolImpl(this, message);\n }\n\n async registrySearchByNamespace(\n registry: string,\n query?: string,\n ): Promise<RegistrySearchByNamespaceResponse> {\n return registrySearchByNamespaceImpl(this, registry, query);\n }\n\n async vectorSearch(\n request: VectorSearchRequest,\n ): Promise<VectorSearchResponse> {\n return vectorSearchImpl(this, request);\n }\n\n async searchStatus(): Promise<SearchStatusResponse> {\n return searchStatusImpl(this);\n }\n\n async websocketStats(): Promise<WebsocketStatsResponse> {\n return websocketStatsImpl(this);\n }\n\n async metricsSummary(): Promise<MetricsSummaryResponse> {\n return metricsSummaryImpl(this);\n }\n\n async facets(adapter?: string): Promise<SearchFacetsResponse> {\n return facetsImpl(this, adapter);\n }\n\n async adapters(): Promise<AdaptersResponse> {\n return adaptersImpl(this);\n }\n\n async skillsConfig(): Promise<SkillRegistryConfigResponse> {\n return skillsConfigImpl(this);\n }\n\n async listSkills(\n options?: SkillListOptions,\n ): Promise<SkillRegistryListResponse> {\n return listSkillsImpl(this, options);\n }\n\n async getSkillsCatalog(\n options?: SkillCatalogQueryOptions,\n ): Promise<SkillCatalogResponse> {\n return getSkillsCatalogImpl(this, options);\n }\n\n async listSkillVersions(params: {\n name: string;\n }): Promise<SkillRegistryVersionsResponse> {\n return listSkillVersionsImpl(this, params);\n }\n\n async listMySkills(params?: {\n limit?: number;\n }): Promise<SkillRegistryMineResponse> {\n return listMySkillsImpl(this, params);\n }\n\n async getMySkillsList(params?: {\n limit?: number;\n cursor?: string;\n accountId?: string;\n }): Promise<SkillRegistryMyListResponse> {\n return getMySkillsListImpl(this, params);\n }\n\n async quoteSkillPublish(\n payload: SkillRegistryQuoteRequest,\n ): Promise<SkillRegistryQuoteResponse> {\n return quoteSkillPublishImpl(this, payload);\n }\n\n async quoteSkillPublishPreview(\n payload: SkillQuotePreviewRequest,\n ): Promise<SkillQuotePreviewResponse> {\n return quoteSkillPublishPreviewImpl(this, payload);\n }\n\n async publishSkill(\n payload: SkillRegistryPublishRequest,\n ): Promise<SkillRegistryPublishResponse> {\n return publishSkillImpl(this, payload);\n }\n\n async getSkillPublishJob(\n jobId: string,\n params?: { accountId?: string },\n ): Promise<SkillRegistryJobStatusResponse> {\n return getSkillPublishJobImpl(this, jobId, params);\n }\n\n async getSkillOwnership(params: {\n name: string;\n accountId?: string;\n }): Promise<SkillRegistryOwnershipResponse> {\n return getSkillOwnershipImpl(this, params);\n }\n\n async getRecommendedSkillVersion(params: {\n name: string;\n }): Promise<SkillRecommendedVersionResponse> {\n return getRecommendedSkillVersionImpl(this, params);\n }\n\n async setRecommendedSkillVersion(\n payload: SkillRecommendedVersionSetRequest,\n ): Promise<SkillRecommendedVersionResponse> {\n return setRecommendedSkillVersionImpl(this, payload);\n }\n\n async getSkillDeprecations(params: {\n name: string;\n }): Promise<SkillDeprecationsResponse> {\n return getSkillDeprecationsImpl(this, params);\n }\n\n async setSkillDeprecation(\n payload: SkillDeprecationSetRequest,\n ): Promise<SkillDeprecationRecord> {\n return setSkillDeprecationImpl(this, payload);\n }\n\n async getSkillBadge(params: SkillBadgeQuery): Promise<SkillBadgeResponse> {\n return getSkillBadgeImpl(this, params);\n }\n\n async getSkillStatus(\n params: SkillStatusRequest,\n ): Promise<SkillStatusResponse> {\n return getSkillStatusImpl(this, params);\n }\n\n async getSkillSecurityBreakdown(\n params: SkillSecurityBreakdownRequest,\n ): Promise<SkillSecurityBreakdownResponse> {\n return getSkillSecurityBreakdownImpl(this, params);\n }\n\n async getSkillStatusByRepo(\n params: SkillPreviewByRepoRequest,\n ): Promise<SkillStatusResponse> {\n return getSkillStatusByRepoImpl(this, params);\n }\n\n async getSkillConversionSignalsByRepo(\n params: SkillPreviewByRepoRequest,\n ): Promise<SkillConversionSignalsResponse> {\n return getSkillConversionSignalsByRepoImpl(this, params);\n }\n\n async uploadSkillPreviewFromGithubOidc(\n payload: UploadSkillPreviewFromGithubOidcRequest,\n ): Promise<SkillPreviewRecord> {\n return uploadSkillPreviewFromGithubOidcImpl(this, payload);\n }\n\n async getSkillPreview(\n params: SkillPreviewLookupRequest,\n ): Promise<SkillPreviewLookupResponse> {\n return getSkillPreviewImpl(this, params);\n }\n\n async getSkillPreviewByRepo(\n params: SkillPreviewByRepoRequest,\n ): Promise<SkillPreviewLookupResponse> {\n return getSkillPreviewByRepoImpl(this, params);\n }\n\n async getSkillPreviewById(\n previewId: string,\n ): Promise<SkillPreviewLookupResponse> {\n return getSkillPreviewByIdImpl(this, previewId);\n }\n\n async getSkillInstall(skillRef: string): Promise<SkillInstallResponse> {\n return getSkillInstallImpl(this, skillRef);\n }\n\n async recordSkillInstallCopy(\n skillRef: string,\n payload?: SkillInstallCopyTelemetryRequest,\n ): Promise<SkillInstallCopyTelemetryResponse> {\n return recordSkillInstallCopyImpl(this, skillRef, payload);\n }\n\n async listSkillTags(): Promise<SkillRegistryTagsResponse> {\n return listSkillTagsImpl(this);\n }\n\n async listSkillCategories(): Promise<SkillRegistryCategoriesResponse> {\n return listSkillCategoriesImpl(this);\n }\n\n async resolveSkillMarkdown(skillRef: string): Promise<string> {\n return resolveSkillMarkdownImpl(this, skillRef);\n }\n\n async resolveSkillManifest(\n skillRef: string,\n ): Promise<SkillResolverManifestResponse> {\n return resolveSkillManifestImpl(this, skillRef);\n }\n\n async getSkillVoteStatus(params: {\n name: string;\n }): Promise<SkillRegistryVoteStatusResponse> {\n return getSkillVoteStatusImpl(this, params);\n }\n\n async setSkillVote(\n payload: SkillRegistryVoteRequest,\n ): Promise<SkillRegistryVoteStatusResponse> {\n return setSkillVoteImpl(this, payload);\n }\n\n async requestSkillVerification(\n payload: SkillVerificationRequestCreateRequest,\n ): Promise<SkillVerificationRequestCreateResponse> {\n return requestSkillVerificationImpl(this, payload);\n }\n\n async getSkillVerificationStatus(params: {\n name: string;\n version?: string;\n }): Promise<SkillVerificationStatusResponse> {\n return getSkillVerificationStatusImpl(this, params);\n }\n\n async createSkillDomainProofChallenge(\n payload: SkillVerificationDomainProofChallengeRequest,\n ): Promise<SkillVerificationDomainProofChallengeResponse> {\n return createSkillDomainProofChallengeImpl(this, payload);\n }\n\n async verifySkillDomainProof(\n payload: SkillVerificationDomainProofVerifyRequest,\n ): Promise<SkillVerificationDomainProofVerifyResponse> {\n return verifySkillDomainProofImpl(this, payload);\n }\n\n async adaptersDetailed(): Promise<AdapterDetailsResponse> {\n return adaptersDetailedImpl(this);\n }\n\n async adapterRegistryCategories(): Promise<AdapterRegistryCategoriesResponse> {\n return adapterRegistryCategoriesImpl(this);\n }\n\n async adapterRegistryAdapters(filters?: {\n category?: string;\n entity?: string;\n keywords?: string[];\n query?: string;\n limit?: number;\n offset?: number;\n }): Promise<AdapterRegistryAdaptersResponse> {\n return adapterRegistryAdaptersImpl(this, filters);\n }\n\n async createAdapterRegistryCategory(\n payload: CreateAdapterRegistryCategoryRequest,\n ): Promise<AdapterRegistryCategory> {\n return createAdapterRegistryCategoryImpl(this, payload);\n }\n\n async submitAdapterRegistryAdapter(\n payload: SubmitAdapterRegistryAdapterRequest,\n ): Promise<AdapterRegistrySubmitAdapterAcceptedResponse> {\n return submitAdapterRegistryAdapterImpl(this, payload);\n }\n\n async adapterRegistrySubmissionStatus(\n submissionId: string,\n ): Promise<AdapterRegistrySubmissionStatusResponse> {\n return adapterRegistrySubmissionStatusImpl(this, submissionId);\n }\n\n async resolveUaid(uaid: string): Promise<ResolvedAgentResponse> {\n return resolveUaidImpl(this, uaid);\n }\n\n async performRegisterAgent(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse> {\n const raw = await this.requestJson<JsonValue>('/register', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n return this.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'register agent response',\n );\n }\n\n private calculateHbarAmount(\n creditsToPurchase: number,\n creditsPerHbar: number,\n ): number {\n if (creditsPerHbar <= 0) {\n throw new Error('creditsPerHbar must be positive');\n }\n if (creditsToPurchase <= 0) {\n throw new Error('creditsToPurchase must be positive');\n }\n const rawHbar = creditsToPurchase / creditsPerHbar;\n const tinybars = Math.ceil(rawHbar * 1e8);\n return tinybars / 1e8;\n }\n\n private resolveCreditsToPurchase(shortfallCredits: number): number {\n if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {\n return 0;\n }\n return Math.max(\n Math.ceil(shortfallCredits),\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n );\n }\n\n async ensureCreditsForRegistration(\n payload: AgentRegistrationRequest,\n autoTopUp: RegisterAgentOptions['autoTopUp'],\n ): Promise<void> {\n const details = autoTopUp ?? null;\n if (!details) {\n return;\n }\n\n if (!details.accountId || !details.accountId.trim()) {\n throw new Error('autoTopUp.accountId is required');\n }\n\n if (!details.privateKey || !details.privateKey.trim()) {\n throw new Error('autoTopUp.privateKey is required');\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const quote = await this.getRegistrationQuote(payload);\n const shortfall = quote.shortfallCredits ?? 0;\n if (shortfall <= 0) {\n return;\n }\n const creditsToPurchase = this.resolveCreditsToPurchase(shortfall);\n if (creditsToPurchase <= 0) {\n return;\n }\n\n const creditsPerHbar = quote.creditsPerHbar ?? null;\n if (!creditsPerHbar || creditsPerHbar <= 0) {\n throw new Error('Unable to determine credits per HBAR for auto top-up');\n }\n\n const hbarAmount = this.calculateHbarAmount(\n creditsToPurchase,\n creditsPerHbar,\n );\n\n await this.purchaseCreditsWithHbar({\n accountId: details.accountId.trim(),\n privateKey: details.privateKey.trim(),\n hbarAmount,\n memo: details.memo ?? 'Registry Broker auto top-up',\n metadata: {\n shortfallCredits: shortfall,\n requiredCredits: quote.requiredCredits,\n purchasedCredits: creditsToPurchase,\n },\n });\n }\n\n const finalQuote = await this.getRegistrationQuote(payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n }\n\n async registerAgent(\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n ): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? this.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return this.performRegisterAgent(payload);\n }\n\n await this.ensureCreditsForRegistration(payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await this.performRegisterAgent(payload);\n } catch (error) {\n const shortfall = this.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await this.ensureCreditsForRegistration(payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n }\n\n async getRegistrationQuote(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentQuoteResponse> {\n return getRegistrationQuoteImpl(this, payload);\n }\n\n async updateAgent(\n uaid: string,\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse> {\n return updateAgentImpl(this, uaid, payload);\n }\n\n async getRegisterStatus(uaid: string): Promise<RegisterStatusResponse> {\n return getRegisterStatusImpl(this, uaid);\n }\n\n async registerOwnedMoltbookAgent(\n uaid: string,\n payload: MoltbookOwnerRegistrationUpdateRequest,\n ): Promise<MoltbookOwnerRegistrationUpdateResponse> {\n return registerOwnedMoltbookAgentImpl(this, uaid, payload);\n }\n\n async getRegistrationProgress(\n attemptId: string,\n ): Promise<RegistrationProgressRecord | null> {\n return getRegistrationProgressImpl(this, attemptId);\n }\n\n async waitForRegistrationCompletion(\n attemptId: string,\n options?: RegistrationProgressWaitOptions,\n ): Promise<RegistrationProgressRecord> {\n return waitForRegistrationCompletionImpl(this, attemptId, options);\n }\n\n async validateUaid(uaid: string): Promise<UaidValidationResponse> {\n return validateUaidImpl(this, uaid);\n }\n\n async getUaidConnectionStatus(uaid: string): Promise<UaidConnectionStatus> {\n return getUaidConnectionStatusImpl(this, uaid);\n }\n\n async closeUaidConnection(uaid: string): Promise<void> {\n return closeUaidConnectionImpl(this, uaid);\n }\n\n async dashboardStats(): Promise<DashboardStatsResponse> {\n return dashboardStatsImpl(this);\n }\n\n async getCreditsBalance(\n params: { accountId?: string } = {},\n ): Promise<CreditBalanceResponse> {\n return getCreditsBalanceImpl(this, params);\n }\n\n async getCreditProviders(): Promise<CreditProvidersResponse> {\n return getCreditProvidersImpl(this);\n }\n\n async getGuardSession(): Promise<GuardSessionResponse> {\n return getGuardSessionImpl(this);\n }\n\n async getGuardEntitlements(): Promise<GuardSessionResponse> {\n return getGuardEntitlementsImpl(this);\n }\n\n async getGuardBillingBalance(): Promise<GuardBalanceResponse> {\n return getGuardBillingBalanceImpl(this);\n }\n\n async getGuardFeed(limit?: number): Promise<GuardFeedResponse> {\n return getGuardFeedImpl(this, limit);\n }\n\n async getGuardOverview(): Promise<GuardOverviewResponse> {\n return getGuardOverviewImpl(this);\n }\n\n async getGuardTrustByHash(sha256: string): Promise<GuardTrustByHashResponse> {\n return getGuardTrustByHashImpl(this, sha256);\n }\n\n async resolveGuardTrust(\n query: GuardTrustResolveQuery,\n ): Promise<GuardTrustResolveResponse> {\n return resolveGuardTrustImpl(this, query);\n }\n\n async getGuardRevocations(): Promise<GuardRevocationResponse> {\n return getGuardRevocationsImpl(this);\n }\n\n async fetchGuardAdvisories(): Promise<GuardRevocationResponse> {\n return fetchGuardAdvisoriesImpl(this);\n }\n\n async fetchGuardPolicy(): Promise<GuardPolicy> {\n return fetchGuardPolicyImpl(this);\n }\n\n async getGuardInventory(): Promise<GuardInventoryResponse> {\n return getGuardInventoryImpl(this);\n }\n\n async getGuardReceiptHistory(): Promise<GuardReceiptHistoryResponse> {\n return getGuardReceiptHistoryImpl(this);\n }\n\n async getGuardArtifactTimeline(\n artifactId: string,\n ): Promise<GuardArtifactTimelineResponse> {\n return getGuardArtifactTimelineImpl(this, artifactId);\n }\n\n async getGuardInventoryDiff(): Promise<GuardInventoryDiffResponse> {\n return getGuardInventoryDiffImpl(this);\n }\n\n async exportGuardAbom(): Promise<GuardAbomResponse> {\n return exportGuardAbomImpl(this);\n }\n\n async exportGuardArtifactAbom(\n artifactId: string,\n ): Promise<GuardAbomResponse> {\n return exportGuardArtifactAbomImpl(this, artifactId);\n }\n\n async exportGuardReceipts(): Promise<GuardReceiptExportResponse> {\n return exportGuardReceiptsImpl(this);\n }\n\n async getGuardDevices(): Promise<GuardDeviceListResponse> {\n return getGuardDevicesImpl(this);\n }\n\n async getGuardAlertPreferences(): Promise<GuardAlertPreferences> {\n return getGuardAlertPreferencesImpl(this);\n }\n\n async updateGuardAlertPreferences(\n payload: GuardAlertPreferencesUpdate,\n ): Promise<GuardAlertPreferences> {\n return updateGuardAlertPreferencesImpl(this, payload);\n }\n\n async getGuardExceptions(): Promise<GuardExceptionListResponse> {\n return getGuardExceptionsImpl(this);\n }\n\n async getGuardWatchlist(): Promise<GuardWatchlistResponse> {\n return getGuardWatchlistImpl(this);\n }\n\n async lookupGuardWatchlist(\n payload: GuardPreflightRequest,\n ): Promise<GuardWatchlistLookupResponse> {\n return lookupGuardWatchlistImpl(this, payload);\n }\n\n async getGuardPainSignals(): Promise<GuardPainSignalListResponse> {\n return getGuardPainSignalsImpl(this);\n }\n\n async getGuardAggregatedPainSignals(): Promise<GuardPainSignalAggregateResponse> {\n return getGuardAggregatedPainSignalsImpl(this);\n }\n\n async getGuardPreInstallVerdict(\n payload: GuardPreflightRequest,\n ): Promise<GuardPreflightVerdictResponse> {\n return getGuardPreInstallVerdictImpl(this, payload);\n }\n\n async getGuardPreExecutionVerdict(\n payload: GuardPreflightRequest,\n ): Promise<GuardPreflightVerdictResponse> {\n return getGuardPreExecutionVerdictImpl(this, payload);\n }\n\n async addGuardWatchlistItem(\n payload: GuardWatchlistUpsert,\n ): Promise<GuardWatchlistResponse> {\n return addGuardWatchlistItemImpl(this, payload);\n }\n\n async removeGuardWatchlistItem(\n artifactId: string,\n ): Promise<GuardWatchlistResponse> {\n return removeGuardWatchlistItemImpl(this, artifactId);\n }\n\n async addGuardException(\n payload: GuardExceptionUpsert,\n ): Promise<GuardExceptionListResponse> {\n return addGuardExceptionImpl(this, payload);\n }\n\n async requestGuardException(\n payload: GuardExceptionUpsert,\n ): Promise<GuardExceptionListResponse> {\n return requestGuardExceptionImpl(this, payload);\n }\n\n async removeGuardException(\n exceptionId: string,\n ): Promise<GuardExceptionListResponse> {\n return removeGuardExceptionImpl(this, exceptionId);\n }\n\n async ingestGuardPainSignals(\n items: GuardPainSignalIngestItem[],\n ): Promise<GuardPainSignalListResponse> {\n return ingestGuardPainSignalsImpl(this, items);\n }\n\n async syncGuardReceipts(\n payload: GuardReceiptSyncPayload,\n ): Promise<GuardReceiptSyncResponse> {\n return syncGuardReceiptsImpl(this, payload);\n }\n\n async syncGuardInventory(\n payload: GuardReceiptSyncPayload,\n ): Promise<GuardReceiptSyncResponse> {\n return syncGuardInventoryImpl(this, payload);\n }\n\n async submitGuardReceipts(\n payload: GuardReceiptSyncPayload,\n ): Promise<GuardReceiptSyncResponse> {\n return submitGuardReceiptsImpl(this, payload);\n }\n\n async getGuardTeamPolicyPack(): Promise<GuardTeamPolicyPack> {\n return getGuardTeamPolicyPackImpl(this);\n }\n\n async updateGuardTeamPolicyPack(\n payload: GuardTeamPolicyPackUpdate,\n ): Promise<GuardTeamPolicyPack> {\n return updateGuardTeamPolicyPackImpl(this, payload);\n }\n\n async createHbarPurchaseIntent(\n payload: HbarPurchaseIntentRequest,\n ): Promise<HbarPurchaseIntentResponse> {\n return createHbarPurchaseIntentImpl(this, payload);\n }\n\n async purchaseCreditsWithHbar(params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n }): Promise<CreditPurchaseResponse> {\n return purchaseCreditsWithHbarImpl(this, params);\n }\n\n async getX402Minimums(): Promise<X402MinimumsResponse> {\n return getX402MinimumsImpl(this);\n }\n\n async purchaseCreditsWithX402(\n params: PurchaseCreditsWithX402Params,\n ): Promise<X402PurchaseResult> {\n return purchaseCreditsWithX402Impl(this, params);\n }\n\n async buyCreditsWithX402(\n params: BuyCreditsWithX402Params,\n ): Promise<X402PurchaseResult> {\n return buyCreditsWithX402Impl(this, params);\n }\n\n async generateEncryptionKeyPair(\n options: GenerateEncryptionKeyPairOptions = {},\n ): Promise<{\n privateKey: string;\n publicKey: string;\n envPath?: string;\n envVar: string;\n }> {\n return generateEncryptionKeyPairImpl(this, options);\n }\n\n async createLedgerChallenge(\n payload: LedgerChallengeRequest,\n ): Promise<LedgerChallengeResponse> {\n return createLedgerChallengeImpl(this, payload);\n }\n\n async verifyLedgerChallenge(\n payload: LedgerVerifyRequest,\n ): Promise<LedgerVerifyResponse> {\n return verifyLedgerChallengeImpl(this, payload);\n }\n\n async authenticateWithLedger(\n options: LedgerAuthenticationOptions,\n ): Promise<LedgerVerifyResponse> {\n return authenticateWithLedgerImpl(this, options);\n }\n\n async authenticateWithLedgerCredentials(\n options: LedgerCredentialAuthOptions,\n ): Promise<LedgerVerifyResponse> {\n return authenticateWithLedgerCredentialsImpl(this, options);\n }\n\n async getVerificationStatus(\n uaid: string,\n ): Promise<VerificationStatusResponse> {\n return getVerificationStatusImpl(this, uaid);\n }\n\n async createVerificationChallenge(\n uaid: string,\n ): Promise<VerificationChallengeResponse> {\n return createVerificationChallengeImpl(this, uaid);\n }\n\n async getVerificationChallenge(\n challengeId: string,\n ): Promise<VerificationChallengeDetailsResponse> {\n return getVerificationChallengeImpl(this, challengeId);\n }\n\n async verifyVerificationChallenge(params: {\n challengeId: string;\n method?: 'moltbook-post' | string;\n }): Promise<VerificationVerifyResponse> {\n return verifyVerificationChallengeImpl(this, params);\n }\n\n async getVerificationOwnership(\n uaid: string,\n ): Promise<VerificationOwnershipResponse> {\n return getVerificationOwnershipImpl(this, uaid);\n }\n\n async verifySenderOwnership(\n uaid: string,\n ): Promise<VerificationVerifySenderResponse> {\n return verifySenderOwnershipImpl(this, uaid);\n }\n\n async verifyUaidDnsTxt(\n payload: VerificationDnsVerifyRequest,\n ): Promise<VerificationDnsStatusResponse> {\n return verifyUaidDnsTxtImpl(this, payload);\n }\n\n async getVerificationDnsStatus(\n uaid: string,\n query?: VerificationDnsStatusQuery,\n ): Promise<VerificationDnsStatusResponse> {\n return getVerificationDnsStatusImpl(this, uaid, query);\n }\n\n async fetchHistorySnapshot(\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n ): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n return fetchHistorySnapshotImpl(\n this.conversationContexts,\n this,\n sessionId,\n options,\n );\n }\n\n attachDecryptedHistory(\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n ): ChatHistorySnapshotWithDecryptedEntries {\n return attachDecryptedHistoryImpl(\n this.conversationContexts,\n this,\n sessionId,\n snapshot,\n options,\n );\n }\n\n registerConversationContextForEncryption(\n context: ConversationContextInput,\n ): void {\n registerConversationContextForEncryptionImpl(\n this.conversationContexts,\n context,\n );\n }\n\n resolveDecryptionContext(\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n ): ConversationContextState | null {\n return resolveDecryptionContextImpl(\n this.conversationContexts,\n this,\n sessionId,\n options,\n );\n }\n\n decryptHistoryEntryFromContext(\n _sessionId: string,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n ): string | null {\n return decryptHistoryEntryFromContextImpl(this, entry, context);\n }\n\n async createSession(\n payload: CreateSessionRequestPayload,\n allowHistoryAutoTopUp = true,\n ): Promise<CreateSessionResponse> {\n return createSessionImpl(this, payload, allowHistoryAutoTopUp);\n }\n\n async resumeSession(sessionId: string): Promise<ChatSessionResumeResponse> {\n return resumeSessionImpl(this, sessionId);\n }\n\n async checkChatReadiness(\n payload: ChatReadinessRequestPayload,\n ): Promise<ChatReadinessResponse> {\n return checkChatReadinessImpl(this, payload);\n }\n\n async startChat(options: StartChatOptions): Promise<ChatConversationHandle> {\n return startChatImpl(this, this.getEncryptedChatManager(), options);\n }\n\n async startConversation(\n options: StartConversationOptions,\n ): Promise<ChatConversationHandle> {\n return startConversationImpl(this, this.getEncryptedChatManager(), options);\n }\n\n async acceptConversation(\n options: AcceptConversationOptions,\n ): Promise<ChatConversationHandle> {\n return acceptConversationImpl(\n this,\n this.getEncryptedChatManager(),\n options,\n );\n }\n\n compactHistory(\n payload: CompactHistoryRequestPayload,\n ): Promise<ChatHistoryCompactionResponse> {\n return compactHistoryImpl(this, payload);\n }\n\n fetchEncryptionStatus(\n sessionId: string,\n ): Promise<SessionEncryptionStatusResponse> {\n return fetchEncryptionStatusImpl(this, sessionId);\n }\n\n postEncryptionHandshake(\n sessionId: string,\n payload: EncryptionHandshakeSubmissionPayload,\n ): Promise<EncryptionHandshakeRecord> {\n return postEncryptionHandshakeImpl(this, sessionId, payload);\n }\n\n sendMessage(\n payload: SendMessageRequestPayload,\n ): Promise<SendMessageResponse> {\n return sendMessageImpl(this, payload);\n }\n\n retryMessage(\n messageId: string,\n payload: ChatRetryRequestPayload,\n ): Promise<ChatRetryResponse> {\n return retryMessageImpl(this, messageId, payload);\n }\n\n cancelSession(sessionId: string): Promise<ChatSessionEndResponse> {\n return cancelSessionImpl(this, sessionId);\n }\n\n endSession(sessionId: string): Promise<ChatSessionEndResponse> {\n return endSessionImpl(this, sessionId);\n }\n\n createPlaintextConversationHandle(\n sessionId: string,\n summary: SessionEncryptionSummary | null,\n defaultAuth?: AgentAuthConfig,\n context?: { uaid?: string; agentUrl?: string },\n ): ChatConversationHandle {\n return createPlaintextConversationHandleImpl(\n this,\n sessionId,\n summary,\n defaultAuth,\n context,\n );\n }\n\n private getEncryptedChatManager(): EncryptedChatManager {\n if (this.encryptedChatManager) {\n return this.encryptedChatManager;\n }\n const manager = new EncryptedChatManager(this);\n this.encryptedChatManager = manager;\n return manager;\n }\n\n private async extractErrorBody(response: Response): Promise<JsonValue> {\n const contentType = response.headers?.get('content-type') ?? '';\n if (JSON_CONTENT_TYPE.test(contentType)) {\n try {\n return (await response.json()) as JsonValue;\n } catch (error) {\n return { parseError: String(error) };\n }\n }\n try {\n return await response.text();\n } catch (error) {\n return { parseError: String(error) };\n }\n }\n\n parseWithSchema<T>(\n value: JsonValue,\n schema: z.ZodSchema<T>,\n context: string,\n ): T {\n try {\n return schema.parse(value);\n } catch (error) {\n throw new RegistryBrokerParseError(\n `Failed to parse ${context}`,\n error instanceof ZodError || error instanceof Error\n ? error\n : String(error),\n value,\n );\n }\n }\n\n async delay(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n resolve();\n }, ms);\n\n const onAbort = (): void => {\n clearTimeout(timer);\n signal?.removeEventListener('abort', onAbort);\n reject(createAbortError());\n };\n\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timer);\n reject(createAbortError());\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n assertNodeRuntime(feature: string): void {\n if (typeof process === 'undefined' || !process.versions?.node) {\n throw new Error(`${feature} is only available in Node.js environments`);\n }\n }\n\n private getNodeCrypto(feature: string): NodeCryptoModule {\n this.assertNodeRuntime(feature);\n const nodeCrypto =\n optionalImportSync<NodeCryptoModule>('node:crypto') ??\n optionalImportSync<NodeCryptoModule>('crypto');\n if (!nodeCrypto) {\n throw new Error(`${feature} requires the Node.js crypto module`);\n }\n return nodeCrypto;\n }\n\n private getSecureRandomBytes(size: number, feature: string): Uint8Array {\n const webCrypto = globalThis.crypto;\n if (webCrypto && typeof webCrypto.getRandomValues === 'function') {\n const bytes = new Uint8Array(size);\n webCrypto.getRandomValues(bytes);\n return bytes;\n }\n return this.getNodeCrypto(feature).randomBytes(size);\n }\n\n createEphemeralKeyPair(): EphemeralKeyPair {\n const privateKeyBytes = this.getSecureRandomBytes(\n 32,\n 'generateEphemeralKeyPair',\n );\n const publicKey = secp256k1.getPublicKey(privateKeyBytes, true);\n return {\n privateKey: Buffer.from(privateKeyBytes).toString('hex'),\n publicKey: Buffer.from(publicKey).toString('hex'),\n };\n }\n\n deriveSharedSecret(options: DeriveSharedSecretOptions): Buffer {\n const { createHash } = this.getNodeCrypto('deriveSharedSecret');\n const privateKey = this.hexToBuffer(options.privateKey);\n const peerPublicKey = this.hexToBuffer(options.peerPublicKey);\n const shared = secp256k1.getSharedSecret(privateKey, peerPublicKey, true);\n return createHash('sha256').update(Buffer.from(shared)).digest();\n }\n\n buildCipherEnvelope(options: EncryptCipherEnvelopeOptions): CipherEnvelope {\n const { createCipheriv, randomBytes } = this.getNodeCrypto(\n 'encryptCipherEnvelope',\n );\n const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);\n const iv = randomBytes(12);\n const cipher = createCipheriv('aes-256-gcm', sharedSecret, iv);\n const aadSource = options.associatedData ?? options.sessionId;\n const associatedDataEncoded = aadSource\n ? Buffer.from(aadSource, 'utf8').toString('base64')\n : undefined;\n if (aadSource) {\n cipher.setAAD(Buffer.from(aadSource, 'utf8'));\n }\n const ciphertext = Buffer.concat([\n cipher.update(Buffer.from(options.plaintext, 'utf8')),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n const payload = Buffer.concat([ciphertext, tag]);\n\n return {\n algorithm: 'aes-256-gcm',\n ciphertext: payload.toString('base64'),\n nonce: iv.toString('base64'),\n associatedData: associatedDataEncoded,\n keyLocator: {\n sessionId: options.sessionId,\n revision: options.revision ?? 1,\n },\n recipients: options.recipients.map(recipient => ({\n ...recipient,\n encryptedShare: '',\n })),\n };\n }\n\n openCipherEnvelope(options: DecryptCipherEnvelopeOptions): string {\n const { createDecipheriv } = this.getNodeCrypto('decryptCipherEnvelope');\n const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);\n const payload = Buffer.from(options.envelope.ciphertext, 'base64');\n const nonce = Buffer.from(options.envelope.nonce, 'base64');\n const ciphertext = payload.slice(0, payload.length - 16);\n const tag = payload.slice(payload.length - 16);\n const decipher = createDecipheriv('aes-256-gcm', sharedSecret, nonce);\n if (options.envelope.associatedData) {\n decipher.setAAD(Buffer.from(options.envelope.associatedData, 'base64'));\n }\n decipher.setAuthTag(tag);\n const plaintext = Buffer.concat([\n decipher.update(ciphertext),\n decipher.final(),\n ]);\n return plaintext.toString(options.encoding ?? 'utf8');\n }\n\n normalizeSharedSecret(input: SharedSecretInput): Buffer {\n if (Buffer.isBuffer(input)) {\n return Buffer.from(input);\n }\n if (input instanceof Uint8Array) {\n return Buffer.from(input);\n }\n if (typeof input === 'string') {\n return this.bufferFromString(input);\n }\n throw new Error('Unsupported shared secret input');\n }\n\n bufferFromString(value: string): Buffer {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('sharedSecret string cannot be empty');\n }\n const normalized = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;\n if (/^[0-9a-fA-F]+$/.test(normalized) && normalized.length % 2 === 0) {\n return Buffer.from(normalized, 'hex');\n }\n return Buffer.from(trimmed, 'base64');\n }\n\n hexToBuffer(value: string): Uint8Array {\n const normalized = value.startsWith('0x') ? value.slice(2) : value;\n if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {\n throw new Error('Expected hex-encoded value');\n }\n return Buffer.from(normalized, 'hex');\n }\n\n extractInsufficientCreditsDetails(error: unknown): {\n shortfallCredits: number;\n } | null {\n if (!(error instanceof RegistryBrokerError) || error.status !== 402) {\n return null;\n }\n\n const body = error.body;\n if (!body || typeof body !== 'object' || Array.isArray(body)) {\n return null;\n }\n\n const maybeShortfall = (body as JsonObject)['shortfallCredits'];\n if (typeof maybeShortfall !== 'number' || maybeShortfall <= 0) {\n return null;\n }\n\n return { shortfallCredits: maybeShortfall };\n }\n\n private extractErrorMessage(body: JsonValue): string | undefined {\n if (typeof body === 'string') {\n return body;\n }\n if (isJsonObject(body) && typeof body.error === 'string') {\n return body.error;\n }\n if (isJsonObject(body) && typeof body.message === 'string') {\n return body.message;\n }\n return undefined;\n }\n\n shouldAutoTopUpHistory(\n payload: CreateSessionRequestPayload,\n error: Error | null,\n ): boolean {\n if (!this.historyAutoTopUp || payload.historyTtlSeconds === undefined) {\n return false;\n }\n if (!(error instanceof RegistryBrokerError)) {\n return false;\n }\n if (error.status !== 402) {\n return false;\n }\n const message = this.extractErrorMessage(error.body);\n if (!message) {\n return true;\n }\n const normalised = message.toLowerCase();\n return (\n normalised.includes('history') || normalised.includes('chat history')\n );\n }\n\n async executeHistoryAutoTopUp(reason: string): Promise<void> {\n if (!this.historyAutoTopUp) {\n return;\n }\n const hbarAmount =\n this.historyAutoTopUp.hbarAmount && this.historyAutoTopUp.hbarAmount > 0\n ? this.historyAutoTopUp.hbarAmount\n : DEFAULT_HISTORY_TOP_UP_HBAR;\n await this.purchaseCreditsWithHbar({\n accountId: this.historyAutoTopUp.accountId,\n privateKey: this.historyAutoTopUp.privateKey,\n hbarAmount,\n memo:\n this.historyAutoTopUp.memo ??\n 'registry-broker-client:chat-history-topup',\n metadata: {\n purpose: 'chat-history',\n reason,\n },\n });\n }\n\n initializeEncryptionBootstrap(\n options: ClientEncryptionOptions,\n ): Promise<void> {\n return this.bootstrapEncryptionOptions(options).then((): void => undefined);\n }\n\n bootstrapEncryptionOptions(\n options?: ClientEncryptionOptions,\n ): Promise<{ publicKey: string; privateKey?: string } | null> {\n return bootstrapEncryptionOptionsImpl(this, options);\n }\n}\n\nexport const isPendingRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentPendingResponse => response.status === 'pending';\n\nexport const isPartialRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentPartialResponse =>\n response.status === 'partial' && response.success === false;\n\nexport const isSuccessRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentSuccessResponse =>\n response.success === true && response.status !== 'pending';\n"],"names":["searchImpl","delegateImpl","statsImpl","registriesImpl","getAdditionalRegistriesImpl","popularSearchesImpl","listProtocolsImpl","detectProtocolImpl","registrySearchByNamespaceImpl","vectorSearchImpl","searchStatusImpl","websocketStatsImpl","metricsSummaryImpl","facetsImpl","adaptersImpl","skillsConfigImpl","listSkillsImpl","getSkillsCatalogImpl","listSkillVersionsImpl","listMySkillsImpl","getMySkillsListImpl","quoteSkillPublishImpl","quoteSkillPublishPreviewImpl","publishSkillImpl","getSkillPublishJobImpl","getSkillOwnershipImpl","getRecommendedSkillVersionImpl","setRecommendedSkillVersionImpl","getSkillDeprecationsImpl","setSkillDeprecationImpl","getSkillBadgeImpl","getSkillStatusImpl","getSkillSecurityBreakdownImpl","getSkillStatusByRepoImpl","getSkillConversionSignalsByRepoImpl","uploadSkillPreviewFromGithubOidcImpl","getSkillPreviewImpl","getSkillPreviewByRepoImpl","getSkillPreviewByIdImpl","getSkillInstallImpl","recordSkillInstallCopyImpl","listSkillTagsImpl","listSkillCategoriesImpl","resolveSkillMarkdownImpl","resolveSkillManifestImpl","getSkillVoteStatusImpl","setSkillVoteImpl","requestSkillVerificationImpl","getSkillVerificationStatusImpl","createSkillDomainProofChallengeImpl","verifySkillDomainProofImpl","adaptersDetailedImpl","adapterRegistryCategoriesImpl","adapterRegistryAdaptersImpl","createAdapterRegistryCategoryImpl","submitAdapterRegistryAdapterImpl","adapterRegistrySubmissionStatusImpl","resolveUaidImpl","getRegistrationQuoteImpl","updateAgentImpl","getRegisterStatusImpl","registerOwnedMoltbookAgentImpl","getRegistrationProgressImpl","waitForRegistrationCompletionImpl","validateUaidImpl","getUaidConnectionStatusImpl","closeUaidConnectionImpl","dashboardStatsImpl","getCreditsBalanceImpl","getCreditProvidersImpl","getGuardSessionImpl","getGuardEntitlementsImpl","getGuardBillingBalanceImpl","getGuardFeedImpl","getGuardOverviewImpl","getGuardTrustByHashImpl","resolveGuardTrustImpl","getGuardRevocationsImpl","fetchGuardAdvisoriesImpl","fetchGuardPolicyImpl","getGuardInventoryImpl","getGuardReceiptHistoryImpl","getGuardArtifactTimelineImpl","getGuardInventoryDiffImpl","exportGuardAbomImpl","exportGuardArtifactAbomImpl","exportGuardReceiptsImpl","getGuardDevicesImpl","getGuardAlertPreferencesImpl","updateGuardAlertPreferencesImpl","getGuardExceptionsImpl","getGuardWatchlistImpl","lookupGuardWatchlistImpl","getGuardPainSignalsImpl","getGuardAggregatedPainSignalsImpl","getGuardPreInstallVerdictImpl","getGuardPreExecutionVerdictImpl","addGuardWatchlistItemImpl","removeGuardWatchlistItemImpl","addGuardExceptionImpl","requestGuardExceptionImpl","removeGuardExceptionImpl","ingestGuardPainSignalsImpl","syncGuardReceiptsImpl","syncGuardInventoryImpl","submitGuardReceiptsImpl","getGuardTeamPolicyPackImpl","updateGuardTeamPolicyPackImpl","createHbarPurchaseIntentImpl","purchaseCreditsWithHbarImpl","getX402MinimumsImpl","purchaseCreditsWithX402Impl","buyCreditsWithX402Impl","generateEncryptionKeyPairImpl","createLedgerChallengeImpl","verifyLedgerChallengeImpl","authenticateWithLedgerImpl","authenticateWithLedgerCredentialsImpl","getVerificationStatusImpl","createVerificationChallengeImpl","getVerificationChallengeImpl","verifyVerificationChallengeImpl","getVerificationOwnershipImpl","verifySenderOwnershipImpl","verifyUaidDnsTxtImpl","getVerificationDnsStatusImpl","fetchHistorySnapshotImpl","attachDecryptedHistoryImpl","registerConversationContextForEncryptionImpl","resolveDecryptionContextImpl","decryptHistoryEntryFromContextImpl","createSessionImpl","resumeSessionImpl","checkChatReadinessImpl","startChatImpl","startConversationImpl","acceptConversationImpl","compactHistoryImpl","fetchEncryptionStatusImpl","postEncryptionHandshakeImpl","sendMessageImpl","retryMessageImpl","cancelSessionImpl","endSessionImpl","createPlaintextConversationHandleImpl","bootstrapEncryptionOptionsImpl"],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es145.js","sources":["../../src/inscribe/inscriber.ts"],"sourcesContent":["import { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport {\n InscriptionOptions,\n InscriptionResult,\n RetrievedInscriptionResult,\n HederaClientConfig,\n QuoteResult,\n StartInscriptionRequest,\n InscriptionJobResponse,\n NodeHederaClientConfig,\n InscriptionCostSummary,\n} from './types';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { Logger, ILogger, LogLevel } from '../utils/logger';\nimport { ProgressCallback, ProgressReporter } from '../utils/progress-reporter';\nimport { TransactionParser } from '../utils/transaction-parser';\nimport { isBrowser } from '../utils/is-browser';\nimport { optionalImport } from '../utils/dynamic-import';\nimport {\n getOrCreateSDK,\n getCachedQuote,\n cacheQuote,\n validateQuoteParameters,\n} from './quote-cache';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { NetworkType } from '../utils/types';\nimport { sleep } from '../utils/sleep';\nimport { computeInscriptionCostSummary } from './inscription-cost';\n\nlet nodeModules: {\n readFileSync?: (path: string) => Buffer;\n basename?: (path: string) => string;\n extname?: (path: string) => string;\n} = {};\n\ntype NodeFsModule = {\n readFileSync: (path: string) => Buffer;\n};\n\ntype NodePathModule = {\n basename: (path: string) => string;\n extname: (path: string) => string;\n};\n\ntype FileTypeModule = {\n fileTypeFromBuffer?: (\n buffer: Buffer,\n ) => Promise<{ mime: string } | undefined>;\n};\n\nexport const normalizeTransactionId = (txId: string): string => {\n if (!txId.includes('@')) {\n return txId;\n }\n const txParts = txId?.split('@');\n return `${txParts[0]}-${txParts[1].replace('.', '-')}`;\n};\n\nasync function loadNodeModules(): Promise<void> {\n if (isBrowser || nodeModules.readFileSync) {\n return;\n }\n\n try {\n const [fsModule, pathModule] = await Promise.all([\n optionalImport<NodeFsModule>('node:fs'),\n optionalImport<NodePathModule>('node:path'),\n ]);\n\n if (!fsModule || !pathModule) {\n throw new Error('Node.js fs or path module not available');\n }\n\n nodeModules.readFileSync = fsModule.readFileSync;\n nodeModules.basename = pathModule.basename;\n nodeModules.extname = pathModule.extname;\n } catch (error) {\n Logger.getInstance({\n module: 'Inscriber',\n level: 'warn',\n }).warn(\n 'Node.js modules not available, file path operations will be disabled',\n {\n error: error instanceof Error ? error.message : String(error),\n },\n );\n }\n}\n\nexport type InscriptionInput =\n | { type: 'url'; url: string }\n | { type: 'file'; path: string }\n | {\n type: 'buffer';\n buffer: ArrayBuffer | Buffer;\n fileName: string;\n mimeType?: string;\n };\n\nconst COST_LOOKUP_ATTEMPTS = 3;\nconst COST_LOOKUP_DELAY_MS = 1000;\nconst COST_LOGGER_MODULE = 'InscriberCost';\n\n/**\n * Convert file path to base64 with mime type detection\n * Note: This function only works in Node.js environment\n */\nasync function convertFileToBase64(filePath: string): Promise<{\n base64: string;\n fileName: string;\n mimeType: string;\n}> {\n if (isBrowser) {\n throw new Error(\n 'File path operations are not supported in browser environment. Use buffer input type instead.',\n );\n }\n\n await loadNodeModules();\n\n if (\n !nodeModules.readFileSync ||\n !nodeModules.basename ||\n !nodeModules.extname\n ) {\n throw new Error(\n 'Node.js file system modules are not available. Cannot read file from path.',\n );\n }\n\n try {\n const buffer = nodeModules.readFileSync(filePath);\n const base64 = buffer.toString('base64');\n const fileName = nodeModules.basename(filePath);\n\n let mimeType = 'application/octet-stream';\n try {\n const fileTypeModule = await optionalImport<FileTypeModule>('file-type');\n const fileTypeResult =\n typeof fileTypeModule?.fileTypeFromBuffer === 'function'\n ? await fileTypeModule.fileTypeFromBuffer(buffer)\n : undefined;\n if (fileTypeResult) {\n mimeType = fileTypeResult.mime;\n }\n } catch (_error) {\n const ext = nodeModules.extname(filePath).toLowerCase();\n const mimeMap: Record<string, string> = {\n '.txt': 'text/plain',\n '.json': 'application/json',\n '.html': 'text/html',\n '.css': 'text/css',\n '.js': 'application/javascript',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.pdf': 'application/pdf',\n };\n mimeType = mimeMap[ext] || 'application/octet-stream';\n }\n\n return { base64, fileName, mimeType };\n } catch (error) {\n throw new Error(\n `Failed to read file ${filePath}: ${(error as Error).message}`,\n );\n }\n}\n\nexport interface InscriptionResponse {\n confirmed: boolean;\n result: InscriptionResult | QuoteResult;\n inscription?: RetrievedInscriptionResult;\n sdk?: InscriptionSDK;\n quote?: boolean;\n costSummary?: InscriptionCostSummary;\n}\n\nfunction normalizeClientConfig(\n cfg: NodeHederaClientConfig,\n): HederaClientConfig {\n return {\n accountId: cfg.accountId,\n privateKey:\n typeof cfg.privateKey === 'string'\n ? cfg.privateKey\n : cfg.privateKey.toString(),\n network: cfg.network,\n };\n}\n\nfunction resolveConnectionMode(options: InscriptionOptions) {\n if (options.connectionMode) {\n return options.connectionMode;\n }\n if (typeof options.websocket === 'boolean') {\n return options.websocket ? 'websocket' : 'http';\n }\n return 'websocket';\n}\n\nexport async function inscribe(\n input: InscriptionInput,\n clientConfig: NodeHederaClientConfig,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK,\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n const resolvedConnectionMode = resolveConnectionMode(options);\n\n logger.info('Starting inscription process', {\n type: input.type,\n mode: options.mode || 'file',\n quoteOnly: options.quoteOnly || false,\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.quoteOnly) {\n logger.debug('Quote-only mode requested, generating quote');\n return await generateQuote(input, clientConfig, options, existingSDK);\n }\n\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: clientConfig.network || 'mainnet',\n connectionMode: resolvedConnectionMode,\n baseURL: options.baseURL,\n });\n } else {\n logger.debug('Initializing InscriptionSDK with server auth');\n const normalized = normalizeClientConfig(clientConfig);\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: normalized.accountId,\n privateKey: normalized.privateKey,\n network: normalized.network || 'mainnet',\n connectionMode: resolvedConnectionMode,\n baseUrl: options.baseURL,\n });\n }\n\n const baseRequest = {\n holderId: clientConfig.accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n fileStandard: options.fileStandard,\n chunkSize: options.chunkSize,\n };\n\n let request: StartInscriptionRequest;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file': {\n const fileData = await convertFileToBase64(input.path);\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: fileData.base64,\n fileName: fileData.fileName,\n mimeType: fileData.mimeType,\n },\n };\n break;\n }\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(\n input.buffer instanceof ArrayBuffer\n ? new Uint8Array(input.buffer)\n : input.buffer,\n ).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || clientConfig.accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: clientConfig.accountId,\n });\n\n const normalizedCfg = normalizeClientConfig(clientConfig);\n\n const result = await sdk.inscribeAndExecute(\n request,\n normalizedCfg,\n options.progressCallback,\n );\n const rawJobId =\n (result as { jobId?: string }).jobId ||\n (result as { tx_id?: string }).tx_id ||\n (result as { transactionId?: string }).transactionId ||\n '';\n const rawTxId =\n (result as { transactionId?: string }).transactionId || rawJobId || '';\n const normalizedJobId = normalizeTransactionId(rawJobId);\n const normalizedTxId = normalizeTransactionId(rawTxId);\n const waitId = normalizeTransactionId(\n normalizedJobId ||\n normalizedTxId ||\n rawJobId ||\n (result as { jobId?: string }).jobId ||\n '',\n );\n logger.info('Starting to inscribe.', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: waitId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n waitId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback,\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result: {\n ...result,\n jobId: waitId,\n transactionId: normalizedTxId,\n },\n inscription,\n sdk,\n costSummary: await resolveInscriptionCost(\n normalizedTxId,\n clientConfig.network || 'mainnet',\n options.logging?.level,\n ),\n };\n }\n\n return {\n confirmed: false,\n result: {\n ...result,\n jobId: waitId,\n transactionId: normalizedTxId,\n },\n sdk,\n costSummary: await resolveInscriptionCost(\n normalizedTxId,\n clientConfig.network || 'mainnet',\n options.logging?.level,\n ),\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nasync function resolveInscriptionCost(\n transactionId: string,\n network: NetworkType,\n level?: LogLevel,\n): Promise<InscriptionCostSummary | undefined> {\n const logger = Logger.getInstance({\n module: COST_LOGGER_MODULE,\n level: level ?? 'info',\n });\n const mirrorNode = new HederaMirrorNode(network, logger);\n const normalizedId = normalizeTransactionId(transactionId);\n\n const payerAccountId = normalizedId.split('-')[0];\n\n for (let attempt = 0; attempt < COST_LOOKUP_ATTEMPTS; attempt++) {\n try {\n const txn = await mirrorNode.getTransaction(normalizedId);\n\n if (!txn) {\n if (attempt < COST_LOOKUP_ATTEMPTS - 1) {\n await sleep(COST_LOOKUP_DELAY_MS);\n }\n continue;\n }\n\n const computed = computeInscriptionCostSummary({\n txn,\n payerAccountId,\n });\n\n if (!computed) {\n if (attempt < COST_LOOKUP_ATTEMPTS - 1) {\n await sleep(COST_LOOKUP_DELAY_MS);\n }\n continue;\n }\n\n return computed.summary;\n } catch (error) {\n logger.warn('Unable to resolve inscription cost', {\n transactionId: normalizedId,\n attempt: attempt + 1,\n error: error instanceof Error ? error.message : String(error),\n });\n\n if (attempt < COST_LOOKUP_ATTEMPTS - 1) {\n await sleep(COST_LOOKUP_DELAY_MS);\n }\n }\n }\n\n return undefined;\n}\n\nexport async function inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK,\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n const resolvedConnectionMode = resolveConnectionMode(options);\n\n logger.info('Starting inscription process with signer', {\n type: input.type,\n mode: options.mode || 'file',\n quoteOnly: options.quoteOnly || false,\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n try {\n if (options.quoteOnly) {\n logger.debug('Quote-only mode requested with signer, generating quote');\n const clientConfig = {\n accountId: signer.getAccountId().toString(),\n privateKey: '',\n network: options.network || 'mainnet',\n };\n return await generateQuote(input, clientConfig, options, existingSDK);\n }\n\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n const accountId = signer.getAccountId().toString();\n logger.debug('Using account ID from signer', { accountId });\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: (options.network || 'mainnet') as 'mainnet' | 'testnet',\n connectionMode: resolvedConnectionMode,\n baseURL: options.baseURL,\n });\n } else {\n logger.debug('Initializing InscriptionSDK with client auth (websocket)');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId,\n signer: signer,\n network: (options.network || 'mainnet') as 'mainnet' | 'testnet',\n connectionMode: resolvedConnectionMode,\n baseUrl: options.baseURL,\n });\n }\n\n const baseRequest = {\n holderId: accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n fileStandard: options.fileStandard,\n chunkSize: options.chunkSize,\n };\n\n let request: StartInscriptionRequest;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file': {\n const fileData = await convertFileToBase64(input.path);\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: fileData.base64,\n fileName: fileData.fileName,\n mimeType: fileData.mimeType,\n },\n };\n break;\n }\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(\n input.buffer instanceof ArrayBuffer\n ? new Uint8Array(input.buffer)\n : input.buffer,\n ).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Starting inscription via startInscription (websocket)', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: accountId,\n usesStartInscription: true,\n });\n\n const startResult = (await sdk.startInscription({\n ...request,\n holderId: accountId,\n network: (options.network || 'mainnet') as 'mainnet' | 'testnet',\n })) as InscriptionJobResponse;\n\n const startTransactionIdRaw =\n (typeof startResult?.tx_id === 'string' && startResult.tx_id.trim()) ||\n (typeof (startResult as unknown as { jobId?: unknown })?.jobId ===\n 'string' &&\n ((startResult as unknown as { jobId: string }).jobId || '').trim()) ||\n (typeof (startResult as unknown as { id?: unknown })?.id === 'string' &&\n ((startResult as unknown as { id: string }).id || '').trim()) ||\n '';\n const waitId = normalizeTransactionId(startTransactionIdRaw);\n if (!waitId) {\n throw new Error('startInscription did not return a transaction id');\n }\n\n logger.info('about to start inscription', {\n type: input.type,\n mode: options.mode || 'file',\n jobId: waitId,\n ...startResult,\n });\n\n if (typeof startResult?.transactionBytes === 'string') {\n logger.debug('Executing inscription transaction with signer from bytes');\n await sdk.executeTransactionWithSigner(\n startResult.transactionBytes,\n signer,\n );\n } else if (startResult?.transactionBytes?.type === 'Buffer') {\n logger.debug('Executing inscription transaction with signer from buffer');\n await sdk.executeTransactionWithSigner(\n Buffer.from(startResult.transactionBytes.data).toString('base64'),\n signer,\n );\n }\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation (websocket)', {\n jobId: waitId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n waitId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback,\n );\n\n logger.info('Inscription confirmation received', {\n jobId: waitId,\n });\n\n return {\n confirmed: true,\n result: {\n jobId: waitId,\n transactionId: waitId,\n topic_id: startResult.topic_id,\n status: startResult.status,\n completed: startResult.completed,\n },\n inscription,\n sdk,\n costSummary: await resolveInscriptionCost(\n waitId,\n options.network || 'mainnet',\n options.logging?.level,\n ),\n };\n }\n\n return {\n confirmed: false,\n result: {\n jobId: waitId,\n transactionId: waitId,\n topic_id: startResult.topic_id,\n status: startResult.status,\n completed: startResult.completed,\n },\n sdk,\n costSummary: await resolveInscriptionCost(\n waitId,\n options.network || 'mainnet',\n options.logging?.level,\n ),\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function retrieveInscription(\n transactionId: string,\n options: InscriptionOptions & { accountId?: string; privateKey?: string },\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...(options?.logging || {}),\n });\n\n const formattedTransactionId = transactionId.includes('@')\n ? `${transactionId.split('@')[0]}-${transactionId\n .split('@')[1]\n .replace(/\\./g, '-')}`\n : transactionId;\n\n logger.info('Retrieving inscription', {\n originalTransactionId: transactionId,\n formattedTransactionId,\n });\n\n try {\n let sdk: InscriptionSDK;\n\n if (options?.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n baseURL: options.baseURL,\n });\n } else if (options?.accountId && options?.privateKey) {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: options.accountId,\n privateKey: options.privateKey,\n network: options.network || 'mainnet',\n baseUrl: options.baseURL,\n });\n } else {\n const error = new Error(\n 'Either API key or account ID and private key are required for retrieving inscriptions',\n );\n logger.error('Missing authentication credentials', {\n hasApiKey: Boolean(options?.apiKey),\n hasAccountId: Boolean(options?.accountId),\n hasPrivateKey: Boolean(options?.privateKey),\n });\n throw error;\n }\n\n logger.debug('Initialized SDK for inscription retrieval', {\n formattedTransactionId,\n network: options.network || 'mainnet',\n });\n\n const result = await sdk.retrieveInscription(formattedTransactionId);\n logger.info('Successfully retrieved inscription', {\n formattedTransactionId,\n });\n\n return result;\n } catch (error) {\n logger.error('Error retrieving inscription', {\n formattedTransactionId,\n error,\n });\n throw error;\n }\n}\n\nexport type { InscriptionOptions } from './types';\n\nfunction validateHashinalMetadata(\n metadata: Record<string, unknown>,\n logger: ILogger,\n): void {\n const requiredFields = ['name', 'creator', 'description', 'type'];\n const missingFields = requiredFields.filter(field => !metadata[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(\n `Missing required Hashinal metadata fields: ${missingFields.join(', ')}`,\n );\n logger.error('Hashinal metadata validation failed', { missingFields });\n throw error;\n }\n\n logger.debug('Hashinal metadata validation passed', {\n name: metadata.name,\n creator: metadata.creator,\n description: metadata.description,\n type: metadata.type,\n hasAttributes: !!metadata.attributes,\n hasProperties: !!metadata.properties,\n });\n}\n\n/**\n * Generate a quote for an inscription without executing it\n * @param input - The inscription input data\n * @param clientConfig - Hedera client configuration\n * @param options - Inscription options\n * @param existingSDK - Optional existing SDK instance\n * @returns Promise containing the quote result\n */\nexport async function generateQuote(\n input: InscriptionInput,\n clientConfig: NodeHederaClientConfig,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK,\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Generating inscription quote', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n validateQuoteParameters(input, clientConfig, options);\n\n const cachedQuote = getCachedQuote(input, clientConfig, options);\n\n if (cachedQuote) {\n logger.debug('Returning cached quote');\n return {\n confirmed: false,\n quote: true,\n result: cachedQuote,\n };\n }\n\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n const sdk = await getOrCreateSDK(clientConfig, options, existingSDK);\n\n const baseRequest = {\n holderId: clientConfig.accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n fileStandard: options.fileStandard,\n chunkSize: options.chunkSize,\n };\n\n let request: StartInscriptionRequest;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file': {\n const fileData = await convertFileToBase64(input.path);\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: fileData.base64,\n fileName: fileData.fileName,\n mimeType: fileData.mimeType,\n },\n };\n break;\n }\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(\n input.buffer instanceof ArrayBuffer\n ? new Uint8Array(input.buffer)\n : input.buffer,\n ).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || clientConfig.accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Calling inscription SDK startInscription for quote', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: clientConfig.accountId,\n });\n\n const inscriptionResponse = await sdk.startInscription(request);\n\n logger.debug('Received inscription response for quote parsing', {\n hasTransactionBytes: !!inscriptionResponse.transactionBytes,\n bytesLength: inscriptionResponse.transactionBytes?.length || 0,\n transactionBytesType: typeof inscriptionResponse.transactionBytes,\n totalCost: (inscriptionResponse as InscriptionJobResponse).totalCost,\n });\n\n const quote = await parseTransactionForQuote(\n inscriptionResponse as InscriptionJobResponse,\n logger,\n );\n\n cacheQuote(input, clientConfig, options, quote);\n\n logger.info('Successfully generated inscription quote', {\n totalCostHbar: quote.totalCostHbar,\n });\n\n return {\n confirmed: false,\n quote: true,\n result: quote,\n };\n } catch (error) {\n logger.error('Error generating inscription quote', error);\n throw error;\n }\n}\n\n/**\n * Parse inscription response to extract HBAR cost information\n * @param inscriptionResponse - Response from inscription SDK\n * @param logger - Logger instance for debugging\n * @returns Promise containing the quote result\n */\nasync function parseTransactionForQuote(\n inscriptionResponse: InscriptionJobResponse,\n logger: ILogger,\n): Promise<QuoteResult> {\n try {\n let totalCostHbar = '0.001';\n\n if (\n inscriptionResponse.totalCost &&\n typeof inscriptionResponse.totalCost === 'number'\n ) {\n const hbarAmount = inscriptionResponse.totalCost / 100000000;\n totalCostHbar = hbarAmount.toString();\n\n logger.debug('Using totalCost from inscription response', {\n totalCostTinybars: inscriptionResponse.totalCost,\n totalCostHbar: totalCostHbar,\n });\n } else if (inscriptionResponse.transactionBytes) {\n logger.debug('Parsing transaction bytes for cost information');\n\n try {\n let transactionBytesString: string;\n\n if (typeof inscriptionResponse.transactionBytes === 'string') {\n transactionBytesString = inscriptionResponse.transactionBytes;\n } else if (\n inscriptionResponse.transactionBytes &&\n typeof inscriptionResponse.transactionBytes === 'object' &&\n 'data' in inscriptionResponse.transactionBytes\n ) {\n const buffer = Buffer.from(inscriptionResponse.transactionBytes.data);\n transactionBytesString = buffer.toString('base64');\n } else {\n throw new Error('Invalid transactionBytes format');\n }\n\n logger.debug('About to parse transaction bytes', {\n bytesLength: transactionBytesString.length,\n bytesPreview: transactionBytesString.slice(0, 100),\n });\n\n const parsedTransaction = await TransactionParser.parseTransactionBytes(\n transactionBytesString,\n { includeRaw: false },\n );\n\n logger.debug('Parsed transaction for quote', {\n type: parsedTransaction.type,\n hasTransfers: !!parsedTransaction.transfers,\n transferCount: parsedTransaction.transfers?.length || 0,\n transfers: parsedTransaction.transfers,\n });\n\n let totalTransferAmount = 0;\n\n if (\n parsedTransaction.transfers &&\n parsedTransaction.transfers.length > 0\n ) {\n for (const transfer of parsedTransaction.transfers) {\n const transferAmount =\n typeof transfer.amount === 'string'\n ? parseFloat(transfer.amount)\n : transfer.amount;\n\n if (transferAmount < 0) {\n const amountHbar = Math.abs(transferAmount);\n totalTransferAmount += amountHbar;\n\n logger.debug('Found HBAR transfer', {\n from: transfer.accountId,\n to: 'service',\n amount: amountHbar,\n });\n }\n }\n }\n\n if (totalTransferAmount > 0) {\n totalCostHbar = totalTransferAmount.toString();\n logger.debug('Using parsed transaction transfer amount', {\n totalTransferAmount,\n totalCostHbar,\n });\n }\n } catch (parseError) {\n logger.warn(\n 'Could not parse transaction bytes, using totalCost fallback',\n {\n error: parseError,\n errorMessage:\n parseError instanceof Error\n ? parseError.message\n : String(parseError),\n },\n );\n }\n }\n\n const transfers = [\n {\n to: 'Inscription Service',\n amount: totalCostHbar,\n description: `Inscription fee (${totalCostHbar} HBAR)`,\n },\n ];\n\n const validUntil = new Date(Date.now() + 15 * 60 * 1000).toISOString();\n\n const quote: QuoteResult = {\n totalCostHbar,\n validUntil,\n breakdown: {\n transfers,\n },\n };\n\n logger.debug('Successfully parsed transaction for quote', {\n totalCostHbar: quote.totalCostHbar,\n transferCount: transfers.length,\n hasTransactionBytes: !!inscriptionResponse.transactionBytes,\n hasTotalCost: !!inscriptionResponse.totalCost,\n });\n\n return quote;\n } catch (error) {\n logger.error('Error parsing transaction for quote', error);\n throw error;\n }\n}\n\nexport async function waitForInscriptionConfirmation(\n sdk: InscriptionSDK,\n transactionId: string,\n maxAttempts: number = 450,\n intervalMs: number = 4000,\n progressCallback?: ProgressCallback,\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({ module: 'Inscriber' });\n const normalizedId = normalizeTransactionId(transactionId);\n const progressReporter = new ProgressReporter({\n module: 'Inscriber',\n logger,\n callback: progressCallback,\n });\n\n try {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: normalizedId,\n maxAttempts,\n intervalMs,\n });\n\n progressReporter.preparing('Preparing for inscription confirmation', 5, {\n transactionId: normalizedId,\n maxAttempts,\n intervalMs,\n });\n\n try {\n const waitMethod = sdk.waitForInscription.bind(sdk) as (\n txId: string,\n maxAttempts: number,\n intervalMs: number,\n checkCompletion: boolean,\n progressCallback?: (data: {\n stage?: string;\n message?: string;\n progressPercent?: number;\n details?: unknown;\n }) => void,\n ) => Promise<RetrievedInscriptionResult>;\n\n const wrappedCallback = (data: {\n stage?: string;\n message?: string;\n progressPercent?: number;\n details?: unknown;\n }) => {\n const stageRaw = data.stage || 'confirming';\n const allowedStages = [\n 'preparing',\n 'submitting',\n 'confirming',\n 'verifying',\n 'completed',\n 'failed',\n ] as const;\n const stage = (\n allowedStages.includes(stageRaw as (typeof allowedStages)[number])\n ? stageRaw\n : 'confirming'\n ) as (typeof allowedStages)[number];\n\n const message = data.message || 'Processing inscription';\n const percent = data.progressPercent || 50;\n\n progressReporter.report({\n stage,\n message,\n progressPercent: percent,\n details: data.details as Record<string, unknown> | undefined,\n });\n };\n\n return await waitMethod(\n normalizedId,\n maxAttempts,\n intervalMs,\n true,\n wrappedCallback,\n );\n } catch (e) {\n logger.debug('Falling back to standard waitForInscription method', {\n error: e,\n });\n progressReporter.verifying('Verifying inscription status', 50, {\n error: e,\n });\n\n return await sdk.waitForInscription(\n normalizedId,\n maxAttempts,\n intervalMs,\n true,\n );\n }\n } catch (error) {\n logger.error('Error waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n error,\n });\n\n progressReporter.failed('Inscription confirmation failed', {\n transactionId,\n error,\n });\n\n throw error;\n }\n}\n\nconst DEFAULT_REGISTRY_BROKER_URL = 'https://hol.org/registry/api/v1';\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_WAIT_TIMEOUT_MS = 120000;\n\n/**\n * Options for inscribing via Registry Broker with ledger authentication\n */\nexport interface InscribeViaRegistryBrokerOptions {\n /** Registry Broker base URL */\n baseUrl?: string;\n /** Ledger API key (from authenticateWithLedger) */\n ledgerApiKey?: string;\n /** Standard API key */\n apiKey?: string;\n /** Inscription mode */\n mode?: 'file' | 'upload' | 'hashinal' | 'hashinal-collection' | 'bulk-files';\n /** Optional metadata */\n metadata?: Record<string, unknown>;\n /** Optional tags */\n tags?: string[];\n /** File standard */\n fileStandard?: string;\n /** Chunk size for large files */\n chunkSize?: number;\n /** Wait for confirmation (default: true) */\n waitForConfirmation?: boolean;\n /** Timeout for waiting (default: 120000ms) */\n waitTimeoutMs?: number;\n /** Poll interval (default: 2000ms) */\n pollIntervalMs?: number;\n /** Logging options */\n logging?: { level?: LogLevel };\n}\n\n/**\n * Result from Registry Broker inscription\n */\nexport interface RegistryBrokerInscriptionResult {\n confirmed: boolean;\n jobId: string;\n status: string;\n hrl?: string;\n topicId?: string;\n network?: string;\n credits?: number;\n usdCents?: number;\n sizeBytes?: number;\n error?: string;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface RegistryBrokerJobResponse {\n jobId?: string;\n id?: string;\n status: string;\n hrl?: string;\n topicId?: string;\n network?: string;\n credits?: number;\n quoteCredits?: number;\n usdCents?: number;\n quoteUsdCents?: number;\n sizeBytes?: number;\n error?: string;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface RegistryBrokerQuoteResponse {\n quoteId: string;\n contentHash: string;\n sizeBytes: number;\n totalCostHbar: number;\n credits: number;\n usdCents: number;\n expiresAt: string;\n mode: string;\n}\n\nasync function fetchRegistryBroker<T>(\n url: string,\n options: RequestInit & { headers?: Record<string, string> },\n): Promise<T> {\n const response = await fetch(url, options);\n const body = await response.json().catch(() => ({}));\n if (!response.ok) {\n const errorMessage =\n typeof body === 'object' && body && 'error' in body\n ? String((body as { error?: unknown }).error)\n : `HTTP ${response.status}`;\n throw new Error(errorMessage);\n }\n return body as T;\n}\n\n/**\n * Inscribe content via the Registry Broker API using credits.\n *\n * This function allows inscribing content using Registry Broker credits instead\n * of direct Hedera transactions. It supports both ledger authentication (EVM/Hedera)\n * and standard API key authentication.\n *\n * @param input - The content to inscribe (URL, file path, or buffer)\n * @param options - Configuration options including auth credentials\n * @returns Promise containing the inscription result with HRL\n *\n * @example\n * ```typescript\n * // Using ledger authentication\n * const result = await inscribeViaRegistryBroker(\n * { type: 'buffer', buffer: myData, fileName: 'data.json' },\n * { ledgerApiKey: 'rbk_...', mode: 'file' }\n * );\n * console.log('Inscribed at:', result.hrl);\n * ```\n */\nexport async function inscribeViaRegistryBroker(\n input: InscriptionInput,\n options: InscribeViaRegistryBrokerOptions = {},\n): Promise<RegistryBrokerInscriptionResult> {\n const logger = Logger.getInstance({\n module: 'InscribeViaBroker',\n ...options.logging,\n });\n\n const baseUrl = options.baseUrl ?? DEFAULT_REGISTRY_BROKER_URL;\n const waitForConfirmation = options.waitForConfirmation ?? true;\n const waitTimeoutMs = options.waitTimeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (options.ledgerApiKey) {\n headers['x-api-key'] = options.ledgerApiKey;\n } else if (options.apiKey) {\n headers['x-api-key'] = options.apiKey;\n } else {\n throw new Error(\n 'Either ledgerApiKey or apiKey is required for Registry Broker inscription',\n );\n }\n\n logger.info('Starting inscription via Registry Broker', {\n baseUrl,\n inputType: input.type,\n mode: options.mode ?? 'file',\n });\n\n let base64Content: string;\n let fileName: string;\n let mimeType: string | undefined;\n\n switch (input.type) {\n case 'url':\n logger.debug('Creating job with URL input');\n break;\n case 'file': {\n const fileData = await convertFileToBase64(input.path);\n base64Content = fileData.base64;\n fileName = fileData.fileName;\n mimeType = fileData.mimeType;\n break;\n }\n case 'buffer':\n base64Content = Buffer.from(\n input.buffer instanceof ArrayBuffer\n ? new Uint8Array(input.buffer)\n : input.buffer,\n ).toString('base64');\n fileName = input.fileName;\n mimeType = input.mimeType;\n break;\n }\n\n const requestBody: Record<string, unknown> = {\n inputType: input.type === 'url' ? 'url' : 'base64',\n mode: options.mode ?? 'file',\n };\n\n if (input.type === 'url') {\n requestBody.url = input.url;\n } else {\n requestBody.base64 = base64Content!;\n requestBody.fileName = fileName!;\n if (mimeType) {\n requestBody.mimeType = mimeType;\n }\n }\n\n if (options.metadata) {\n requestBody.metadata = options.metadata;\n }\n if (options.tags) {\n requestBody.tags = options.tags;\n }\n if (options.fileStandard) {\n requestBody.fileStandard = options.fileStandard;\n }\n if (options.chunkSize) {\n requestBody.chunkSize = options.chunkSize;\n }\n\n logger.debug('Creating inscription job');\n const job = await fetchRegistryBroker<RegistryBrokerJobResponse>(\n `${baseUrl}/inscribe/content`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify(requestBody),\n },\n );\n\n const jobId = job.jobId ?? job.id ?? '';\n logger.info('Inscription job created', { jobId, status: job.status });\n\n if (!waitForConfirmation) {\n return {\n confirmed: false,\n jobId,\n status: job.status,\n credits: job.credits ?? job.quoteCredits,\n usdCents: job.usdCents ?? job.quoteUsdCents,\n sizeBytes: job.sizeBytes,\n createdAt: job.createdAt,\n updatedAt: job.updatedAt,\n network: job.network,\n };\n }\n\n logger.debug('Polling for job completion', { jobId, waitTimeoutMs });\n const startTime = Date.now();\n let lastStatus = '';\n\n while (Date.now() - startTime < waitTimeoutMs) {\n const currentJob = await fetchRegistryBroker<RegistryBrokerJobResponse>(\n `${baseUrl}/inscribe/content/${jobId}`,\n { method: 'GET', headers },\n );\n\n if (currentJob.status !== lastStatus) {\n logger.debug('Job status update', { jobId, status: currentJob.status });\n lastStatus = currentJob.status;\n }\n\n if (currentJob.status === 'completed') {\n logger.info('Inscription completed', {\n jobId,\n hrl: currentJob.hrl,\n topicId: currentJob.topicId,\n });\n\n return {\n confirmed: true,\n jobId,\n status: currentJob.status,\n hrl: currentJob.hrl,\n topicId: currentJob.topicId,\n network: currentJob.network,\n credits: currentJob.credits ?? currentJob.quoteCredits,\n usdCents: currentJob.usdCents ?? currentJob.quoteUsdCents,\n sizeBytes: currentJob.sizeBytes,\n createdAt: currentJob.createdAt,\n updatedAt: currentJob.updatedAt,\n };\n }\n\n if (currentJob.status === 'failed') {\n logger.error('Inscription failed', { jobId, error: currentJob.error });\n return {\n confirmed: false,\n jobId,\n status: currentJob.status,\n error: currentJob.error ?? 'Inscription failed',\n credits: currentJob.credits ?? currentJob.quoteCredits,\n createdAt: currentJob.createdAt,\n updatedAt: currentJob.updatedAt,\n };\n }\n\n await sleep(pollIntervalMs);\n }\n\n throw new Error(\n `Inscription job ${jobId} did not complete within ${waitTimeoutMs}ms`,\n );\n}\n\n/**\n * Get an inscription quote from the Registry Broker without creating a job.\n *\n * @param input - The content to get a quote for\n * @param options - Configuration options\n * @returns Promise containing the quote with cost information\n */\nexport async function getRegistryBrokerQuote(\n input: InscriptionInput,\n options: InscribeViaRegistryBrokerOptions = {},\n): Promise<RegistryBrokerQuoteResponse> {\n const logger = Logger.getInstance({\n module: 'InscribeViaBroker',\n ...options.logging,\n });\n\n const baseUrl = options.baseUrl ?? DEFAULT_REGISTRY_BROKER_URL;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (options.ledgerApiKey) {\n headers['x-api-key'] = options.ledgerApiKey;\n } else if (options.apiKey) {\n headers['x-api-key'] = options.apiKey;\n } else {\n throw new Error(\n 'Either ledgerApiKey or apiKey is required for Registry Broker quotes',\n );\n }\n\n let base64Content: string | undefined;\n let fileName: string | undefined;\n let mimeType: string | undefined;\n\n switch (input.type) {\n case 'url':\n break;\n case 'file': {\n const fileData = await convertFileToBase64(input.path);\n base64Content = fileData.base64;\n fileName = fileData.fileName;\n mimeType = fileData.mimeType;\n break;\n }\n case 'buffer':\n base64Content = Buffer.from(\n input.buffer instanceof ArrayBuffer\n ? new Uint8Array(input.buffer)\n : input.buffer,\n ).toString('base64');\n fileName = input.fileName;\n mimeType = input.mimeType;\n break;\n }\n\n const requestBody: Record<string, unknown> = {\n inputType: input.type === 'url' ? 'url' : 'base64',\n mode: options.mode ?? 'file',\n };\n\n if (input.type === 'url') {\n requestBody.url = input.url;\n } else {\n requestBody.base64 = base64Content;\n requestBody.fileName = fileName;\n if (mimeType) {\n requestBody.mimeType = mimeType;\n }\n }\n\n if (options.metadata) {\n requestBody.metadata = options.metadata;\n }\n if (options.tags) {\n requestBody.tags = options.tags;\n }\n if (options.fileStandard) {\n requestBody.fileStandard = options.fileStandard;\n }\n if (options.chunkSize) {\n requestBody.chunkSize = options.chunkSize;\n }\n\n logger.debug('Getting inscription quote from Registry Broker');\n\n return fetchRegistryBroker<RegistryBrokerQuoteResponse>(\n `${baseUrl}/inscribe/content/quote`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify(requestBody),\n },\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,20 +1,211 @@
1
- class RegistryBrokerError extends Error {
2
- constructor(message, details) {
3
- super(message);
4
- this.status = details.status;
5
- this.statusText = details.statusText;
6
- this.body = details.body;
1
+ import { InscriptionSDK } from "./standards-sdk.es163.js";
2
+ class QuoteCache {
3
+ constructor() {
4
+ this.cache = /* @__PURE__ */ new Map();
5
+ this.maxSize = 100;
6
+ this.defaultTtlMs = 5 * 60 * 1e3;
7
+ }
8
+ // 5 minutes
9
+ /**
10
+ * Generate cache key from input parameters
11
+ */
12
+ generateKey(key) {
13
+ return `${key.inputHash}-${key.clientConfigHash}-${key.optionsHash}`;
14
+ }
15
+ /**
16
+ * Hash object to string for cache key
17
+ */
18
+ hashObject(obj) {
19
+ return Buffer.from(JSON.stringify(obj)).toString("base64").slice(0, 16);
20
+ }
21
+ /**
22
+ * Create cache key from parameters
23
+ */
24
+ createCacheKey(input, clientConfig, options) {
25
+ return {
26
+ inputHash: this.hashObject(input),
27
+ clientConfigHash: this.hashObject({
28
+ accountId: clientConfig.accountId,
29
+ network: clientConfig.network
30
+ }),
31
+ optionsHash: this.hashObject({
32
+ mode: options.mode,
33
+ apiKey: options.apiKey ? "present" : "absent",
34
+ network: options.network,
35
+ metadata: options.metadata
36
+ })
37
+ };
38
+ }
39
+ /**
40
+ * Get cached quote if available and not expired
41
+ */
42
+ get(key) {
43
+ const cacheKey = this.generateKey(key);
44
+ const entry = this.cache.get(cacheKey);
45
+ if (!entry) {
46
+ return null;
47
+ }
48
+ const now = Date.now();
49
+ if (now - entry.timestamp > entry.ttlMs) {
50
+ this.cache.delete(cacheKey);
51
+ return null;
52
+ }
53
+ this.cache.delete(cacheKey);
54
+ this.cache.set(cacheKey, entry);
55
+ return entry.quote;
56
+ }
57
+ /**
58
+ * Store quote in cache
59
+ */
60
+ set(key, quote, ttlMs = this.defaultTtlMs) {
61
+ const cacheKey = this.generateKey(key);
62
+ if (this.cache.size >= this.maxSize) {
63
+ const firstKey = this.cache.keys().next().value;
64
+ if (firstKey) {
65
+ this.cache.delete(firstKey);
66
+ }
67
+ }
68
+ this.cache.set(cacheKey, {
69
+ quote,
70
+ timestamp: Date.now(),
71
+ ttlMs
72
+ });
73
+ }
74
+ /**
75
+ * Clear all cached entries
76
+ */
77
+ clear() {
78
+ this.cache.clear();
7
79
  }
8
80
  }
9
- class RegistryBrokerParseError extends Error {
10
- constructor(message, cause, rawValue) {
11
- super(message);
12
- this.cause = cause;
13
- this.rawValue = rawValue;
81
+ class SDKCache {
82
+ constructor() {
83
+ this.cache = /* @__PURE__ */ new Map();
84
+ this.maxSize = 10;
85
+ this.defaultTtlMs = 30 * 60 * 1e3;
86
+ }
87
+ // 30 minutes
88
+ /**
89
+ * Generate config key for SDK instance
90
+ */
91
+ generateConfigKey(config) {
92
+ return Buffer.from(JSON.stringify(config)).toString("base64");
93
+ }
94
+ /**
95
+ * Get cached SDK instance
96
+ */
97
+ get(config) {
98
+ const configKey = this.generateConfigKey(config);
99
+ const entry = this.cache.get(configKey);
100
+ if (!entry) {
101
+ return null;
102
+ }
103
+ const now = Date.now();
104
+ if (now - entry.timestamp > this.defaultTtlMs) {
105
+ this.cache.delete(configKey);
106
+ return null;
107
+ }
108
+ return entry.sdk;
109
+ }
110
+ /**
111
+ * Store SDK instance in cache
112
+ */
113
+ set(config, sdk) {
114
+ const configKey = this.generateConfigKey(config);
115
+ if (this.cache.size >= this.maxSize) {
116
+ const firstKey = this.cache.keys().next().value;
117
+ if (firstKey) {
118
+ this.cache.delete(firstKey);
119
+ }
120
+ }
121
+ this.cache.set(configKey, {
122
+ sdk,
123
+ timestamp: Date.now(),
124
+ config: configKey
125
+ });
126
+ }
127
+ /**
128
+ * Clear all cached SDK instances
129
+ */
130
+ clear() {
131
+ this.cache.clear();
132
+ }
133
+ }
134
+ const quoteCache = new QuoteCache();
135
+ const sdkCache = new SDKCache();
136
+ async function getOrCreateSDK(clientConfig, options, existingSDK) {
137
+ if (existingSDK) {
138
+ return existingSDK;
139
+ }
140
+ const connectionMode = options.connectionMode ?? "websocket";
141
+ const cacheConfig = {
142
+ apiKey: options.apiKey,
143
+ accountId: clientConfig.accountId,
144
+ network: clientConfig.network || "mainnet",
145
+ authType: options.apiKey ? "api" : "server",
146
+ connectionMode
147
+ };
148
+ const cachedSDK = sdkCache.get(cacheConfig);
149
+ if (cachedSDK) {
150
+ return cachedSDK;
151
+ }
152
+ let sdk;
153
+ if (options.apiKey) {
154
+ sdk = new InscriptionSDK({
155
+ apiKey: options.apiKey,
156
+ network: clientConfig.network || "mainnet",
157
+ connectionMode
158
+ });
159
+ } else {
160
+ sdk = await InscriptionSDK.createWithAuth({
161
+ type: "server",
162
+ accountId: clientConfig.accountId,
163
+ privateKey: typeof clientConfig.privateKey === "string" ? clientConfig.privateKey : clientConfig.privateKey.toString(),
164
+ network: clientConfig.network || "mainnet",
165
+ connectionMode
166
+ });
167
+ }
168
+ sdkCache.set(cacheConfig, sdk);
169
+ return sdk;
170
+ }
171
+ function getCachedQuote(input, clientConfig, options) {
172
+ const cacheKey = quoteCache.createCacheKey(input, clientConfig, options);
173
+ return quoteCache.get(cacheKey);
174
+ }
175
+ function cacheQuote(input, clientConfig, options, quote) {
176
+ const cacheKey = quoteCache.createCacheKey(input, clientConfig, options);
177
+ const quoteTtlMs = 10 * 60 * 1e3;
178
+ quoteCache.set(cacheKey, quote, quoteTtlMs);
179
+ }
180
+ function validateQuoteParameters(input, clientConfig, options) {
181
+ if (!input || typeof input !== "object" || !("type" in input)) {
182
+ throw new Error("Invalid inscription input: type is required");
183
+ }
184
+ if (!clientConfig || !clientConfig.accountId) {
185
+ throw new Error("Invalid client config: accountId is required");
186
+ }
187
+ if (!options) {
188
+ throw new Error("Options are required");
189
+ }
190
+ if (options.mode === "hashinal") {
191
+ if (!options.metadata) {
192
+ throw new Error("Hashinal mode requires metadata");
193
+ }
194
+ const requiredFields = ["name", "creator", "description", "type"];
195
+ const missingFields = requiredFields.filter(
196
+ (field) => !options.metadata || !options.metadata[field]
197
+ );
198
+ if (missingFields.length > 0) {
199
+ throw new Error(
200
+ `Missing required Hashinal metadata fields: ${missingFields.join(", ")}`
201
+ );
202
+ }
14
203
  }
15
204
  }
16
205
  export {
17
- RegistryBrokerError,
18
- RegistryBrokerParseError
206
+ cacheQuote,
207
+ getCachedQuote,
208
+ getOrCreateSDK,
209
+ validateQuoteParameters
19
210
  };
20
211
  //# sourceMappingURL=standards-sdk.es146.js.map