@hashgraphonline/standards-sdk 0.0.95 → 0.0.97

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 (270) hide show
  1. package/dist/es/hcs-10/base-client.d.ts +14 -3
  2. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  3. package/dist/es/hcs-10/connections-manager.d.ts +51 -0
  4. package/dist/es/hcs-10/connections-manager.d.ts.map +1 -1
  5. package/dist/es/hcs-10/sdk.d.ts +38 -1
  6. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  7. package/dist/es/hcs-10/types.d.ts +9 -3
  8. package/dist/es/hcs-10/types.d.ts.map +1 -1
  9. package/dist/es/services/index.d.ts +1 -0
  10. package/dist/es/services/index.d.ts.map +1 -1
  11. package/dist/es/services/mirror-node.d.ts +17 -1
  12. package/dist/es/services/mirror-node.d.ts.map +1 -1
  13. package/dist/es/services/types.d.ts +24 -0
  14. package/dist/es/services/types.d.ts.map +1 -1
  15. package/dist/es/standards-sdk.es.js +6 -4
  16. package/dist/es/standards-sdk.es.js.map +1 -1
  17. package/dist/es/standards-sdk.es10.js +66 -0
  18. package/dist/es/standards-sdk.es10.js.map +1 -1
  19. package/dist/es/standards-sdk.es100.js +4 -13
  20. package/dist/es/standards-sdk.es100.js.map +1 -1
  21. package/dist/es/standards-sdk.es101.js +4 -13
  22. package/dist/es/standards-sdk.es101.js.map +1 -1
  23. package/dist/es/standards-sdk.es102.js +15 -31
  24. package/dist/es/standards-sdk.es102.js.map +1 -1
  25. package/dist/es/standards-sdk.es103.js +4 -14
  26. package/dist/es/standards-sdk.es103.js.map +1 -1
  27. package/dist/es/standards-sdk.es104.js +39 -4
  28. package/dist/es/standards-sdk.es104.js.map +1 -1
  29. package/dist/es/standards-sdk.es105.js +40 -4
  30. package/dist/es/standards-sdk.es105.js.map +1 -1
  31. package/dist/es/standards-sdk.es106.js +36 -15
  32. package/dist/es/standards-sdk.es106.js.map +1 -1
  33. package/dist/es/standards-sdk.es107.js +78 -5
  34. package/dist/es/standards-sdk.es107.js.map +1 -1
  35. package/dist/es/standards-sdk.es108.js +4 -39
  36. package/dist/es/standards-sdk.es108.js.map +1 -1
  37. package/dist/es/standards-sdk.es109.js +32 -38
  38. package/dist/es/standards-sdk.es109.js.map +1 -1
  39. package/dist/es/standards-sdk.es110.js +31 -35
  40. package/dist/es/standards-sdk.es110.js.map +1 -1
  41. package/dist/es/standards-sdk.es111.js +9 -78
  42. package/dist/es/standards-sdk.es111.js.map +1 -1
  43. package/dist/es/standards-sdk.es112.js +34 -3
  44. package/dist/es/standards-sdk.es112.js.map +1 -1
  45. package/dist/es/standards-sdk.es113.js +3 -2
  46. package/dist/es/standards-sdk.es113.js.map +1 -1
  47. package/dist/es/standards-sdk.es114.js +2 -2
  48. package/dist/es/standards-sdk.es114.js.map +1 -1
  49. package/dist/es/standards-sdk.es115.js +2 -34
  50. package/dist/es/standards-sdk.es115.js.map +1 -1
  51. package/dist/es/standards-sdk.es116.js +97 -29
  52. package/dist/es/standards-sdk.es116.js.map +1 -1
  53. package/dist/es/standards-sdk.es117.js +2 -9
  54. package/dist/es/standards-sdk.es117.js.map +1 -1
  55. package/dist/es/standards-sdk.es118.js +16 -34
  56. package/dist/es/standards-sdk.es118.js.map +1 -1
  57. package/dist/es/standards-sdk.es119.js +412 -0
  58. package/dist/es/standards-sdk.es119.js.map +1 -0
  59. package/dist/es/standards-sdk.es120.js +2285 -0
  60. package/dist/es/standards-sdk.es120.js.map +1 -0
  61. package/dist/es/standards-sdk.es121.js +7139 -0
  62. package/dist/es/standards-sdk.es121.js.map +1 -0
  63. package/dist/es/standards-sdk.es122.js +13 -0
  64. package/dist/es/standards-sdk.es122.js.map +1 -0
  65. package/dist/es/standards-sdk.es123.js +14 -0
  66. package/dist/es/standards-sdk.es123.js.map +1 -0
  67. package/dist/es/standards-sdk.es124.js +21 -0
  68. package/dist/es/standards-sdk.es124.js.map +1 -0
  69. package/dist/es/standards-sdk.es125.js +9 -0
  70. package/dist/es/standards-sdk.es125.js.map +1 -0
  71. package/dist/es/standards-sdk.es126.js +12 -0
  72. package/dist/es/standards-sdk.es126.js.map +1 -0
  73. package/dist/es/standards-sdk.es13.js +5 -5
  74. package/dist/es/standards-sdk.es15.js +1 -1
  75. package/dist/es/standards-sdk.es16.js +1 -1
  76. package/dist/es/standards-sdk.es18.js +2 -2
  77. package/dist/es/standards-sdk.es19.js +393 -387
  78. package/dist/es/standards-sdk.es19.js.map +1 -1
  79. package/dist/es/standards-sdk.es20.js +386 -315
  80. package/dist/es/standards-sdk.es20.js.map +1 -1
  81. package/dist/es/standards-sdk.es21.js +357 -128
  82. package/dist/es/standards-sdk.es21.js.map +1 -1
  83. package/dist/es/standards-sdk.es22.js +155 -7
  84. package/dist/es/standards-sdk.es22.js.map +1 -1
  85. package/dist/es/standards-sdk.es23.js +7 -1041
  86. package/dist/es/standards-sdk.es23.js.map +1 -1
  87. package/dist/es/standards-sdk.es24.js +966 -1692
  88. package/dist/es/standards-sdk.es24.js.map +1 -1
  89. package/dist/es/standards-sdk.es25.js +122 -5543
  90. package/dist/es/standards-sdk.es25.js.map +1 -1
  91. package/dist/es/standards-sdk.es26.js +7190 -3
  92. package/dist/es/standards-sdk.es26.js.map +1 -1
  93. package/dist/es/standards-sdk.es27.js +3 -2
  94. package/dist/es/standards-sdk.es27.js.map +1 -1
  95. package/dist/es/standards-sdk.es28.js +8 -4166
  96. package/dist/es/standards-sdk.es28.js.map +1 -1
  97. package/dist/es/standards-sdk.es29.js +2 -36
  98. package/dist/es/standards-sdk.es29.js.map +1 -1
  99. package/dist/es/standards-sdk.es30.js +5 -48
  100. package/dist/es/standards-sdk.es30.js.map +1 -1
  101. package/dist/es/standards-sdk.es31.js +36 -5
  102. package/dist/es/standards-sdk.es31.js.map +1 -1
  103. package/dist/es/standards-sdk.es32.js +48 -2
  104. package/dist/es/standards-sdk.es32.js.map +1 -1
  105. package/dist/es/standards-sdk.es33.js +9 -100
  106. package/dist/es/standards-sdk.es33.js.map +1 -1
  107. package/dist/es/standards-sdk.es34.js +4167 -2
  108. package/dist/es/standards-sdk.es34.js.map +1 -1
  109. package/dist/es/standards-sdk.es35.js +2 -16
  110. package/dist/es/standards-sdk.es35.js.map +1 -1
  111. package/dist/es/standards-sdk.es36.js +353 -398
  112. package/dist/es/standards-sdk.es36.js.map +1 -1
  113. package/dist/es/standards-sdk.es37.js +4 -193
  114. package/dist/es/standards-sdk.es37.js.map +1 -1
  115. package/dist/es/standards-sdk.es38.js +158 -417
  116. package/dist/es/standards-sdk.es38.js.map +1 -1
  117. package/dist/es/standards-sdk.es39.js +75 -19
  118. package/dist/es/standards-sdk.es39.js.map +1 -1
  119. package/dist/es/standards-sdk.es4.js +1 -1
  120. package/dist/es/standards-sdk.es40.js +103 -128
  121. package/dist/es/standards-sdk.es40.js.map +1 -1
  122. package/dist/es/standards-sdk.es41.js +48 -14
  123. package/dist/es/standards-sdk.es41.js.map +1 -1
  124. package/dist/es/standards-sdk.es42.js +9 -28
  125. package/dist/es/standards-sdk.es42.js.map +1 -1
  126. package/dist/es/standards-sdk.es43.js +91 -23
  127. package/dist/es/standards-sdk.es43.js.map +1 -1
  128. package/dist/es/standards-sdk.es44.js +3 -20
  129. package/dist/es/standards-sdk.es44.js.map +1 -1
  130. package/dist/es/standards-sdk.es45.js +2 -44
  131. package/dist/es/standards-sdk.es45.js.map +1 -1
  132. package/dist/es/standards-sdk.es46.js +108 -13
  133. package/dist/es/standards-sdk.es46.js.map +1 -1
  134. package/dist/es/standards-sdk.es47.js +71 -58
  135. package/dist/es/standards-sdk.es47.js.map +1 -1
  136. package/dist/es/standards-sdk.es48.js +4 -1287
  137. package/dist/es/standards-sdk.es48.js.map +1 -1
  138. package/dist/es/standards-sdk.es49.js +4 -147
  139. package/dist/es/standards-sdk.es49.js.map +1 -1
  140. package/dist/es/standards-sdk.es5.js +32 -9
  141. package/dist/es/standards-sdk.es5.js.map +1 -1
  142. package/dist/es/standards-sdk.es50.js +208 -78
  143. package/dist/es/standards-sdk.es50.js.map +1 -1
  144. package/dist/es/standards-sdk.es51.js +55 -81
  145. package/dist/es/standards-sdk.es51.js.map +1 -1
  146. package/dist/es/standards-sdk.es52.js +69 -32
  147. package/dist/es/standards-sdk.es52.js.map +1 -1
  148. package/dist/es/standards-sdk.es53.js +418 -5
  149. package/dist/es/standards-sdk.es53.js.map +1 -1
  150. package/dist/es/standards-sdk.es54.js +2 -159
  151. package/dist/es/standards-sdk.es54.js.map +1 -1
  152. package/dist/es/standards-sdk.es55.js +119 -22
  153. package/dist/es/standards-sdk.es55.js.map +1 -1
  154. package/dist/es/standards-sdk.es56.js +168 -766
  155. package/dist/es/standards-sdk.es56.js.map +1 -1
  156. package/dist/es/standards-sdk.es57.js +431 -167
  157. package/dist/es/standards-sdk.es57.js.map +1 -1
  158. package/dist/es/standards-sdk.es58.js +25 -2282
  159. package/dist/es/standards-sdk.es58.js.map +1 -1
  160. package/dist/es/standards-sdk.es59.js +125 -150
  161. package/dist/es/standards-sdk.es59.js.map +1 -1
  162. package/dist/es/standards-sdk.es60.js +13 -138
  163. package/dist/es/standards-sdk.es60.js.map +1 -1
  164. package/dist/es/standards-sdk.es61.js +21 -7128
  165. package/dist/es/standards-sdk.es61.js.map +1 -1
  166. package/dist/es/standards-sdk.es62.js +19 -11
  167. package/dist/es/standards-sdk.es62.js.map +1 -1
  168. package/dist/es/standards-sdk.es63.js +19 -25
  169. package/dist/es/standards-sdk.es63.js.map +1 -1
  170. package/dist/es/standards-sdk.es64.js +42 -24
  171. package/dist/es/standards-sdk.es64.js.map +1 -1
  172. package/dist/es/standards-sdk.es65.js +16 -36
  173. package/dist/es/standards-sdk.es65.js.map +1 -1
  174. package/dist/es/standards-sdk.es66.js +49 -407
  175. package/dist/es/standards-sdk.es66.js.map +1 -1
  176. package/dist/es/standards-sdk.es67.js +1289 -2
  177. package/dist/es/standards-sdk.es67.js.map +1 -1
  178. package/dist/es/standards-sdk.es68.js +138 -110
  179. package/dist/es/standards-sdk.es68.js.map +1 -1
  180. package/dist/es/standards-sdk.es69.js +91 -3
  181. package/dist/es/standards-sdk.es69.js.map +1 -1
  182. package/dist/es/standards-sdk.es7.js +106 -5
  183. package/dist/es/standards-sdk.es7.js.map +1 -1
  184. package/dist/es/standards-sdk.es70.js +83 -3
  185. package/dist/es/standards-sdk.es70.js.map +1 -1
  186. package/dist/es/standards-sdk.es71.js +28 -360
  187. package/dist/es/standards-sdk.es71.js.map +1 -1
  188. package/dist/es/standards-sdk.es72.js +5 -5
  189. package/dist/es/standards-sdk.es72.js.map +1 -1
  190. package/dist/es/standards-sdk.es73.js +147 -167
  191. package/dist/es/standards-sdk.es73.js.map +1 -1
  192. package/dist/es/standards-sdk.es74.js +22 -80
  193. package/dist/es/standards-sdk.es74.js.map +1 -1
  194. package/dist/es/standards-sdk.es75.js +781 -102
  195. package/dist/es/standards-sdk.es75.js.map +1 -1
  196. package/dist/es/standards-sdk.es76.js +166 -44
  197. package/dist/es/standards-sdk.es76.js.map +1 -1
  198. package/dist/es/standards-sdk.es77.js +142 -9
  199. package/dist/es/standards-sdk.es77.js.map +1 -1
  200. package/dist/es/standards-sdk.es78.js +3 -97
  201. package/dist/es/standards-sdk.es78.js.map +1 -1
  202. package/dist/es/standards-sdk.es79.js +163 -3
  203. package/dist/es/standards-sdk.es79.js.map +1 -1
  204. package/dist/es/standards-sdk.es8.js +4 -4
  205. package/dist/es/standards-sdk.es80.js +32 -2
  206. package/dist/es/standards-sdk.es80.js.map +1 -1
  207. package/dist/es/standards-sdk.es81.js +53 -103
  208. package/dist/es/standards-sdk.es81.js.map +1 -1
  209. package/dist/es/standards-sdk.es82.js +45 -69
  210. package/dist/es/standards-sdk.es82.js.map +1 -1
  211. package/dist/es/standards-sdk.es83.js +9 -5
  212. package/dist/es/standards-sdk.es83.js.map +1 -1
  213. package/dist/es/standards-sdk.es84.js +64 -4
  214. package/dist/es/standards-sdk.es84.js.map +1 -1
  215. package/dist/es/standards-sdk.es85.js +6 -221
  216. package/dist/es/standards-sdk.es85.js.map +1 -1
  217. package/dist/es/standards-sdk.es86.js +13 -56
  218. package/dist/es/standards-sdk.es86.js.map +1 -1
  219. package/dist/es/standards-sdk.es87.js +6 -68
  220. package/dist/es/standards-sdk.es87.js.map +1 -1
  221. package/dist/es/standards-sdk.es88.js +44 -31
  222. package/dist/es/standards-sdk.es88.js.map +1 -1
  223. package/dist/es/standards-sdk.es89.js +2 -63
  224. package/dist/es/standards-sdk.es89.js.map +1 -1
  225. package/dist/es/standards-sdk.es9.js +1 -1
  226. package/dist/es/standards-sdk.es90.js +133 -47
  227. package/dist/es/standards-sdk.es90.js.map +1 -1
  228. package/dist/es/standards-sdk.es91.js +172 -10
  229. package/dist/es/standards-sdk.es91.js.map +1 -1
  230. package/dist/es/standards-sdk.es92.js +17 -61
  231. package/dist/es/standards-sdk.es92.js.map +1 -1
  232. package/dist/es/standards-sdk.es93.js +27 -6
  233. package/dist/es/standards-sdk.es93.js.map +1 -1
  234. package/dist/es/standards-sdk.es94.js +25 -14
  235. package/dist/es/standards-sdk.es94.js.map +1 -1
  236. package/dist/es/standards-sdk.es95.js +38 -7
  237. package/dist/es/standards-sdk.es95.js.map +1 -1
  238. package/dist/es/standards-sdk.es96.js +12 -44
  239. package/dist/es/standards-sdk.es96.js.map +1 -1
  240. package/dist/es/standards-sdk.es97.js +13 -2
  241. package/dist/es/standards-sdk.es97.js.map +1 -1
  242. package/dist/es/standards-sdk.es98.js +30 -134
  243. package/dist/es/standards-sdk.es98.js.map +1 -1
  244. package/dist/es/standards-sdk.es99.js +14 -171
  245. package/dist/es/standards-sdk.es99.js.map +1 -1
  246. package/dist/es/utils/index.d.ts +1 -0
  247. package/dist/es/utils/index.d.ts.map +1 -1
  248. package/dist/es/utils/transaction-parser.d.ts +103 -0
  249. package/dist/es/utils/transaction-parser.d.ts.map +1 -0
  250. package/dist/umd/hcs-10/base-client.d.ts +14 -3
  251. package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
  252. package/dist/umd/hcs-10/connections-manager.d.ts +51 -0
  253. package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -1
  254. package/dist/umd/hcs-10/sdk.d.ts +38 -1
  255. package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
  256. package/dist/umd/hcs-10/types.d.ts +9 -3
  257. package/dist/umd/hcs-10/types.d.ts.map +1 -1
  258. package/dist/umd/services/index.d.ts +1 -0
  259. package/dist/umd/services/index.d.ts.map +1 -1
  260. package/dist/umd/services/mirror-node.d.ts +17 -1
  261. package/dist/umd/services/mirror-node.d.ts.map +1 -1
  262. package/dist/umd/services/types.d.ts +24 -0
  263. package/dist/umd/services/types.d.ts.map +1 -1
  264. package/dist/umd/standards-sdk.umd.js +8 -8
  265. package/dist/umd/standards-sdk.umd.js.map +1 -1
  266. package/dist/umd/utils/index.d.ts +1 -0
  267. package/dist/umd/utils/index.d.ts.map +1 -1
  268. package/dist/umd/utils/transaction-parser.d.ts +103 -0
  269. package/dist/umd/utils/transaction-parser.d.ts.map +1 -0
  270. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/base-client.ts"],"sourcesContent":["import { Logger, LogLevel } from '../utils/logger';\nimport { Registration } from './registrations';\nimport { HCS11Client } from '../hcs-11/client';\nimport { AccountResponse, TopicResponse } from '../services/types';\nimport { TopicInfo } from '../services/types';\nimport { TransactionReceipt, PrivateKey, PublicKey } from '@hashgraph/sdk';\nimport axios from 'axios';\nimport { NetworkType } from '../utils/types';\nimport { HederaMirrorNode } from '../services';\nimport { WaitForConnectionConfirmationResponse } from './types';\nimport { HRLResolver } from '../utils/hrl-resolver';\n\nexport enum Hcs10MemoType {\n INBOUND = 'inbound',\n OUTBOUND = 'outbound',\n CONNECTION = 'connection',\n}\n\nexport interface HCS10Config {\n network: 'mainnet' | 'testnet';\n logLevel?: LogLevel;\n prettyPrint?: boolean;\n feeAmount?: number;\n}\n\nexport interface HCSMessage {\n p: 'hcs-10';\n op:\n | 'connection_request'\n | 'connection_created'\n | 'message'\n | 'close_connection';\n data: string;\n created?: Date;\n consensus_timestamp?: string;\n m?: string;\n payer: string;\n outbound_topic_id?: string;\n connection_request_id?: number;\n confirmed_request_id?: number;\n connection_topic_id?: string;\n connected_account_id?: string;\n requesting_account_id?: string;\n connection_id?: number;\n sequence_number: number;\n operator_id?: string;\n reason?: string;\n close_method?: string;\n}\n\nexport interface ProfileResponse {\n profile: any;\n topicInfo?: TopicInfo;\n success: boolean;\n error?: string;\n}\n\nexport abstract class HCS10BaseClient extends Registration {\n protected network: string;\n protected logger: Logger;\n protected mirrorNode: HederaMirrorNode;\n protected feeAmount: number;\n\n protected operatorId: string;\n\n constructor(config: HCS10Config) {\n super();\n this.network = config.network;\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS10-BaseClient',\n prettyPrint: config.prettyPrint,\n });\n this.mirrorNode = new HederaMirrorNode(\n config.network as NetworkType,\n this.logger\n );\n this.feeAmount = config.feeAmount || 0.001;\n }\n\n abstract submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee?: boolean\n ): Promise<TransactionReceipt>;\n\n abstract getAccountAndSigner(): { accountId: string; signer: any };\n\n public extractTopicFromOperatorId(operatorId: string): string {\n if (!operatorId) {\n return '';\n }\n const parts = operatorId.split('@');\n if (parts.length > 0) {\n return parts[0];\n }\n return '';\n }\n\n public extractAccountFromOperatorId(operatorId: string): string {\n if (!operatorId) {\n return '';\n }\n const parts = operatorId.split('@');\n if (parts.length > 1) {\n return parts[1];\n }\n return '';\n }\n\n /**\n * Get a stream of messages from a connection topic\n * @param topicId The connection topic ID to get messages from\n * @returns A stream of filtered messages valid for connection topics\n */\n public async getMessageStream(\n topicId: string\n ): Promise<{ messages: HCSMessage[] }> {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId);\n const validOps = ['message', 'close_connection'];\n\n const filteredMessages = messages.filter((msg) => {\n if (msg.p !== 'hcs-10' || !validOps.includes(msg.op)) {\n return false;\n }\n\n if (msg.op === 'message') {\n if (!msg.data) {\n return false;\n }\n\n if (!msg.operator_id) {\n return false;\n }\n\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n }\n\n if (msg.op === 'close_connection') {\n if (!msg.operator_id) {\n return false;\n }\n\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n }\n\n return true;\n });\n\n return {\n messages: filteredMessages,\n };\n } catch (error: any) {\n if (this.logger) {\n this.logger.error(`Error fetching messages: ${error.message}`);\n }\n return { messages: [] };\n }\n }\n\n /**\n * Public method to retrieve topic information using the internal mirror node client.\n *\n * @param topicId The ID of the topic to query.\n * @returns Topic information or null if not found or an error occurs.\n */\n async getPublicTopicInfo(topicId: string): Promise<TopicResponse | null> {\n try {\n return await this.mirrorNode.getTopicInfo(topicId);\n } catch (error) {\n this.logger.error(\n `Error getting public topic info for ${topicId}:`,\n error\n );\n return null;\n }\n }\n\n /**\n * Checks if a user can submit to a topic and determines if a fee is required\n * @param topicId The topic ID to check\n * @param userAccountId The account ID of the user attempting to submit\n * @returns Object with canSubmit, requiresFee, and optional reason\n */\n public async canSubmitToTopic(\n topicId: string,\n userAccountId: string\n ): Promise<{ canSubmit: boolean; requiresFee: boolean; reason?: string }> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n return {\n canSubmit: false,\n requiresFee: false,\n reason: 'Topic does not exist',\n };\n }\n\n if (!topicInfo.submit_key?.key) {\n return { canSubmit: true, requiresFee: false };\n }\n\n try {\n const userPublicKey = await this.mirrorNode.getPublicKey(userAccountId);\n\n if (topicInfo.submit_key._type === 'ProtobufEncoded') {\n const keyBytes = Buffer.from(topicInfo.submit_key.key, 'hex');\n const hasAccess = await this.mirrorNode.checkKeyListAccess(\n keyBytes,\n userPublicKey\n );\n\n if (hasAccess) {\n return { canSubmit: true, requiresFee: false };\n }\n } else {\n const topicSubmitKey = PublicKey.fromString(topicInfo.submit_key.key);\n if (userPublicKey.toString() === topicSubmitKey.toString()) {\n return { canSubmit: true, requiresFee: false };\n }\n }\n } catch (error) {\n this.logger.error(\n `Key validation error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n\n if (\n topicInfo.fee_schedule_key?.key &&\n topicInfo.custom_fees?.fixed_fees?.length > 0\n ) {\n return {\n canSubmit: true,\n requiresFee: true,\n reason: 'Requires fee payment via HIP-991',\n };\n }\n\n return {\n canSubmit: false,\n requiresFee: false,\n reason: 'User does not have submit permission for this topic',\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger.error(`Topic submission validation error: ${errorMessage}`);\n return {\n canSubmit: false,\n requiresFee: false,\n reason: `Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Get all messages from a topic\n * @param topicId The topic ID to get messages from\n * @returns All messages from the topic\n */\n public async getMessages(\n topicId: string\n ): Promise<{ messages: HCSMessage[] }> {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId);\n\n const validatedMessages = messages.filter((msg) => {\n if (msg.p !== 'hcs-10') {\n return false;\n }\n\n if (msg.op === 'message') {\n if (!msg.data) {\n return false;\n }\n\n if (msg.operator_id) {\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n }\n }\n\n return true;\n });\n\n return {\n messages: validatedMessages,\n };\n } catch (error: any) {\n if (this.logger) {\n this.logger.error(`Error fetching messages: ${error.message}`);\n }\n return { messages: [] };\n }\n }\n\n /**\n * Requests an account from the mirror node\n * @param account The account ID to request\n * @returns The account response\n */\n public async requestAccount(account: string): Promise<AccountResponse> {\n try {\n return await this.mirrorNode.requestAccount(account);\n } catch (e) {\n this.logger.error('Failed to fetch account', e);\n throw e;\n }\n }\n\n /**\n * Retrieves the memo for an account\n * @param accountId The account ID to retrieve the memo for\n * @returns The memo\n */\n public async getAccountMemo(accountId: string): Promise<string | null> {\n return await this.mirrorNode.getAccountMemo(accountId);\n }\n\n /**\n * Retrieves the profile for an account\n * @param accountId The account ID to retrieve the profile for\n * @param disableCache Whether to disable caching of the result\n * @returns The profile\n */\n public async retrieveProfile(\n accountId: string,\n disableCache?: boolean\n ): Promise<ProfileResponse> {\n this.logger.debug(`Retrieving profile for account: ${accountId}`);\n\n const cacheKey = `${accountId}-${this.network}`;\n\n if (!disableCache) {\n const cachedProfileResponse = HCS10Cache.getInstance().get(cacheKey);\n if (cachedProfileResponse) {\n this.logger.debug(`Cache hit for profile: ${accountId}`);\n return cachedProfileResponse;\n }\n }\n try {\n const hcs11Client = new HCS11Client({\n network: this.network as 'mainnet' | 'testnet',\n auth: {\n operatorId: '0.0.0', // Read-only operations only\n },\n logLevel: 'info',\n });\n\n const profileResult = await hcs11Client.fetchProfileByAccountId(\n accountId,\n this.network\n );\n\n if (!profileResult?.success) {\n this.logger.error(\n `Failed to retrieve profile for account ID: ${accountId}`,\n profileResult?.error\n );\n return {\n profile: null,\n success: false,\n error:\n profileResult?.error ||\n `Failed to retrieve profile for account ID: ${accountId}`,\n };\n }\n\n const profile = profileResult.profile;\n let topicInfo: TopicInfo | null = null;\n\n if (\n profileResult.topicInfo?.inboundTopic &&\n profileResult.topicInfo?.outboundTopic &&\n profileResult.topicInfo?.profileTopicId\n ) {\n topicInfo = {\n inboundTopic: profileResult.topicInfo.inboundTopic,\n outboundTopic: profileResult.topicInfo.outboundTopic,\n profileTopicId: profileResult.topicInfo.profileTopicId,\n };\n }\n\n const responseToCache: ProfileResponse = {\n profile,\n topicInfo,\n success: true,\n };\n HCS10Cache.getInstance().set(cacheKey, responseToCache);\n return responseToCache;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve profile: ${error.message}`;\n this.logger.error(logMessage);\n return {\n profile: null,\n success: false,\n error: logMessage,\n };\n }\n }\n\n /**\n * @deprecated Use retrieveCommunicationTopics instead\n * @param accountId The account ID to retrieve the outbound connect topic for\n * @returns {TopicInfo} Topic Info from target profile.\n */\n public async retrieveOutboundConnectTopic(\n accountId: string\n ): Promise<TopicInfo> {\n return await this.retrieveCommunicationTopics(accountId, true);\n }\n\n /**\n * Retrieves the communication topics for an account\n * @param accountId The account ID to retrieve the communication topics for\n * @param disableCache Whether to disable caching of the result\n * @returns {TopicInfo} Topic Info from target profile.\n */\n public async retrieveCommunicationTopics(\n accountId: string,\n disableCache?: boolean\n ): Promise<TopicInfo> {\n try {\n const profileResponse = await this.retrieveProfile(\n accountId,\n disableCache\n );\n\n if (!profileResponse?.success) {\n throw new Error(profileResponse.error || 'Failed to retrieve profile');\n }\n\n const profile = profileResponse.profile;\n\n if (!profile.inboundTopicId || !profile.outboundTopicId) {\n throw new Error(\n `Invalid HCS-11 profile for HCS-10 agent: missing inboundTopicId or outboundTopicId`\n );\n }\n\n if (!profileResponse.topicInfo) {\n throw new Error(\n `TopicInfo is missing in the profile for account ${accountId}`\n );\n }\n\n return profileResponse.topicInfo;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve topic info: ${error.message}`;\n this.logger.error(logMessage);\n throw error;\n }\n }\n\n /**\n * Retrieves outbound messages for an agent\n * @param agentAccountId The account ID of the agent\n * @returns The outbound messages\n */\n public async retrieveOutboundMessages(\n agentAccountId: string\n ): Promise<HCSMessage[]> {\n try {\n const topicInfo = await this.retrieveCommunicationTopics(agentAccountId);\n if (!topicInfo) {\n this.logger.warn(\n `No outbound connect topic found for agentAccountId: ${agentAccountId}`\n );\n return [];\n }\n const response = await this.getMessages(topicInfo.outboundTopic);\n return response.messages.filter(\n (msg) =>\n msg.p === 'hcs-10' &&\n (msg.op === 'connection_request' ||\n msg.op === 'connection_created' ||\n msg.op === 'message')\n );\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve outbound messages: ${error.message}`;\n this.logger.error(logMessage);\n return [];\n }\n }\n\n /**\n * Checks if a connection has been created for an agent\n * @param agentAccountId The account ID of the agent\n * @param connectionId The ID of the connection\n * @returns True if the connection has been created, false otherwise\n */\n public async hasConnectionCreated(\n agentAccountId: string,\n connectionId: number\n ): Promise<boolean> {\n try {\n const outBoundTopic = await this.retrieveCommunicationTopics(\n agentAccountId\n );\n const messages = await this.retrieveOutboundMessages(\n outBoundTopic.outboundTopic\n );\n return messages.some(\n (msg) =>\n msg.op === 'connection_created' && msg.connection_id === connectionId\n );\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to check connection created: ${error.message}`;\n this.logger.error(logMessage);\n return false;\n }\n }\n\n /**\n * Gets message content, resolving any HRL references if needed\n * @param data The data string that may contain an HRL reference\n * @param forceRaw Whether to force returning raw binary data\n * @returns The resolved content\n */\n async getMessageContent(\n data: string,\n forceRaw = false\n ): Promise<string | ArrayBuffer> {\n if (!data.match(/^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/)) {\n return data;\n }\n\n try {\n const resolver = new HRLResolver(this.logger.getLevel());\n\n if (!resolver.isValidHRL(data)) {\n return data;\n }\n\n const result = await resolver.resolveHRL(data, {\n network: this.network as 'mainnet' | 'testnet',\n returnRaw: forceRaw,\n });\n\n return result.content;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Gets message content with its content type, resolving any HRL references if needed\n * @param data The data string that may contain an HRL reference\n * @param forceRaw Whether to force returning raw binary data\n * @returns The resolved content along with content type information\n */\n async getMessageContentWithType(\n data: string,\n forceRaw = false\n ): Promise<{\n content: string | ArrayBuffer;\n contentType: string;\n isBinary: boolean;\n }> {\n if (!data.match(/^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/)) {\n return {\n content: data,\n contentType: 'text/plain',\n isBinary: false,\n };\n }\n\n try {\n const resolver = new HRLResolver(this.logger.getLevel());\n\n return await resolver.getContentWithType(data, {\n network: this.network as 'mainnet' | 'testnet',\n returnRaw: forceRaw,\n });\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference with type: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Submits a connection request to an inbound topic\n * @param inboundTopicId The ID of the inbound topic\n * @param memo An optional memo for the message\n * @returns The transaction receipt\n */\n async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const accountResponse = this.getAccountAndSigner();\n if (!accountResponse?.accountId) {\n throw new Error('Operator account ID is not set');\n }\n const operatorId = await this.getOperatorId();\n const accountId = accountResponse.accountId;\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n accountId\n );\n\n if (!submissionCheck?.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const inboundAccountOwner = await this.retrieveInboundAccountId(\n inboundTopicId\n );\n\n if (!inboundAccountOwner) {\n throw new Error('Failed to retrieve topic info account ID');\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n m: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveCommunicationTopics(accountId);\n\n if (!outboundTopic) {\n throw new Error('Failed to retrieve outbound topic');\n }\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n const requestorOperatorId = `${inboundTopicId}@${inboundAccountOwner}`;\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n operator_id: requestorOperatorId,\n });\n\n return response;\n }\n\n /**\n * Records an outbound connection confirmation\n * @param outboundTopicId The ID of the outbound topic\n * @param connectionRequestId The ID of the connection request\n * @param confirmedRequestId The ID of the confirmed request\n * @param connectionTopicId The ID of the connection topic\n * @param operatorId The operator ID of the original message sender.\n * @param memo An optional memo for the message\n */\n public async recordOutboundConnectionConfirmation({\n outboundTopicId,\n requestorOutboundTopicId,\n connectionRequestId,\n confirmedRequestId,\n connectionTopicId,\n operatorId,\n memo,\n }: {\n outboundTopicId: string;\n requestorOutboundTopicId: string;\n connectionRequestId: number;\n confirmedRequestId: number;\n connectionTopicId: string;\n operatorId: string;\n memo: string;\n }): Promise<TransactionReceipt> {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n outbound_topic_id: outboundTopicId,\n requestor_outbound_topic_id: requestorOutboundTopicId,\n confirmed_request_id: confirmedRequestId,\n connection_request_id: connectionRequestId,\n operator_id: operatorId,\n m: memo,\n };\n return await this.submitPayload(outboundTopicId, payload);\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000,\n recordConfirmation = true\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n const confirmationResult = {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n\n const confirmedByAccountId = this.extractAccountFromOperatorId(\n confirmationResult.confirmedBy\n );\n\n const account = this.getAccountAndSigner();\n const confirmedByConnectionTopics =\n await this.retrieveCommunicationTopics(confirmedByAccountId);\n\n const agentConnectionTopics =\n await this.retrieveCommunicationTopics(account.accountId);\n\n this.logger.info(\n 'Connection confirmation found',\n confirmationResult\n );\n\n if (recordConfirmation) {\n /**\n * Record's the confirmation of the connection request from the\n * confirmedBy account to the agent account.\n */\n await this.recordOutboundConnectionConfirmation({\n requestorOutboundTopicId:\n confirmedByConnectionTopics.outboundTopic,\n outboundTopicId: agentConnectionTopics.outboundTopic,\n connectionRequestId,\n confirmedRequestId: confirmationResult.sequence_number,\n connectionTopicId: confirmationResult.connectionTopicId,\n operatorId: confirmationResult.confirmedBy,\n memo: confirmationResult.memo || 'Connection confirmed',\n });\n }\n\n return confirmationResult;\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n /**\n * Retrieves the operator ID for the current agent\n * @param disableCache Whether to disable caching of the result\n * @returns The operator ID\n */\n public async getOperatorId(disableCache?: boolean): Promise<string> {\n if (this.operatorId && !disableCache) {\n return this.operatorId;\n }\n\n const accountResponse = this.getAccountAndSigner();\n\n if (!accountResponse.accountId) {\n throw new Error('Operator ID not found');\n }\n\n const profile = await this.retrieveProfile(accountResponse.accountId);\n\n if (!profile.success) {\n throw new Error('Failed to retrieve profile');\n }\n\n const operatorId = `${profile.topicInfo?.inboundTopic}@${accountResponse.accountId}`;\n this.operatorId = operatorId;\n return operatorId;\n }\n\n /**\n * Retrieves the account ID of the owner of an inbound topic\n * @param inboundTopicId The ID of the inbound topic\n * @returns The account ID of the owner of the inbound topic\n */\n public async retrieveInboundAccountId(\n inboundTopicId: string\n ): Promise<string> {\n const topicInfo = await this.mirrorNode.getTopicInfo(inboundTopicId);\n\n if (!topicInfo?.memo) {\n throw new Error('Failed to retrieve topic info');\n }\n\n const topicInfoMemo = topicInfo.memo.toString();\n const topicInfoParts = topicInfoMemo.split(':');\n const inboundAccountOwner = topicInfoParts?.[4];\n\n if (!inboundAccountOwner) {\n throw new Error('Failed to retrieve topic info account ID');\n }\n\n return inboundAccountOwner;\n }\n\n public clearCache(): void {\n HCS10Cache.getInstance().clear();\n }\n\n /**\n * Generates a standard HCS-10 memo string.\n * @param type The type of topic memo ('inbound', 'outbound', 'connection').\n * @param options Configuration options for the memo.\n * @returns The formatted memo string.\n * @protected\n */\n protected _generateHcs10Memo(\n type: Hcs10MemoType,\n options: {\n ttl?: number;\n accountId?: string;\n inboundTopicId?: string;\n connectionId?: number;\n }\n ): string {\n const ttl = options.ttl ?? 60; // Default TTL to 60 if not provided\n\n switch (type) {\n case Hcs10MemoType.INBOUND:\n if (!options.accountId) {\n throw new Error('accountId is required for inbound memo');\n }\n return `hcs-10:0:${ttl}:0:${options.accountId}`;\n case Hcs10MemoType.OUTBOUND:\n return `hcs-10:0:${ttl}:1`;\n case Hcs10MemoType.CONNECTION:\n if (!options.inboundTopicId || options.connectionId === undefined) {\n throw new Error(\n 'inboundTopicId and connectionId are required for connection memo'\n );\n }\n return `hcs-10:1:${ttl}:2:${options.inboundTopicId}:${options.connectionId}`;\n default:\n throw new Error(`Invalid HCS-10 memo type: ${type}`);\n }\n }\n\n protected async checkRegistrationStatus(\n transactionId: string,\n network: string,\n baseUrl: string\n ): Promise<{ status: 'pending' | 'success' | 'failed' }> {\n try {\n const response = await fetch(`${baseUrl}/api/request-confirm`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Network': network,\n },\n body: JSON.stringify({ transaction_id: transactionId }),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to confirm registration: ${response.statusText}`\n );\n }\n\n return await response.json();\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error checking registration status: ${error.message}`;\n this.logger.error(logMessage);\n throw error;\n }\n }\n\n /**\n * Validates if an operator_id follows the correct format (agentTopicId@accountId)\n * @param operatorId The operator ID to validate\n * @returns True if the format is valid, false otherwise\n */\n protected isValidOperatorId(operatorId: string): boolean {\n if (!operatorId) {\n return false;\n }\n\n const parts = operatorId.split('@');\n\n if (parts.length !== 2) {\n return false;\n }\n\n const agentTopicId = parts[0];\n const accountId = parts[1];\n\n if (!agentTopicId) {\n return false;\n }\n\n if (!accountId) {\n return false;\n }\n\n const hederaIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n\n if (!hederaIdPattern.test(accountId)) {\n return false;\n }\n\n if (!hederaIdPattern.test(agentTopicId)) {\n return false;\n }\n\n return true;\n }\n}\n\nexport class HCS10Cache {\n private static instance: HCS10Cache;\n private cache: Map<string, ProfileResponse>;\n private cacheExpiry: Map<string, number>;\n private readonly CACHE_TTL = 3600000;\n\n private constructor() {\n this.cache = new Map();\n this.cacheExpiry = new Map();\n }\n\n static getInstance(): HCS10Cache {\n if (!HCS10Cache.instance) {\n HCS10Cache.instance = new HCS10Cache();\n }\n return HCS10Cache.instance;\n }\n\n set(key: string, value: ProfileResponse): void {\n this.cache.set(key, value);\n this.cacheExpiry.set(key, Date.now() + this.CACHE_TTL);\n }\n\n get(key: string): ProfileResponse | undefined {\n const expiry = this.cacheExpiry.get(key);\n if (expiry && expiry > Date.now()) {\n return this.cache.get(key);\n }\n if (expiry) {\n this.cache.delete(key);\n this.cacheExpiry.delete(key);\n }\n return undefined;\n }\n\n clear(): void {\n this.cache.clear();\n this.cacheExpiry.clear();\n }\n}\n"],"names":["Hcs10MemoType"],"mappings":";;;;;;;AAYY,IAAA,kCAAAA,mBAAL;AACLA,iBAAA,SAAU,IAAA;AACVA,iBAAA,UAAW,IAAA;AACXA,iBAAA,YAAa,IAAA;AAHHA,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AA6CL,MAAe,wBAAwB,aAAa;AAAA,EAQzD,YAAY,QAAqB;AACzB,UAAA;AACN,SAAK,UAAU,OAAO;AACjB,SAAA,SAAS,OAAO,YAAY;AAAA,MAC/B,OAAO,OAAO,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,aAAa,OAAO;AAAA,IAAA,CACrB;AACD,SAAK,aAAa,IAAI;AAAA,MACpB,OAAO;AAAA,MACP,KAAK;AAAA,IACP;AACK,SAAA,YAAY,OAAO,aAAa;AAAA,EAAA;AAAA,EAYhC,2BAA2B,YAA4B;AAC5D,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IAAA;AAEH,UAAA,QAAQ,WAAW,MAAM,GAAG;AAC9B,QAAA,MAAM,SAAS,GAAG;AACpB,aAAO,MAAM,CAAC;AAAA,IAAA;AAET,WAAA;AAAA,EAAA;AAAA,EAGF,6BAA6B,YAA4B;AAC9D,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IAAA;AAEH,UAAA,QAAQ,WAAW,MAAM,GAAG;AAC9B,QAAA,MAAM,SAAS,GAAG;AACpB,aAAO,MAAM,CAAC;AAAA,IAAA;AAET,WAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,MAAa,iBACX,SACqC;AACjC,QAAA;AACF,YAAM,WAAW,MAAM,KAAK,WAAW,iBAAiB,OAAO;AACzD,YAAA,WAAW,CAAC,WAAW,kBAAkB;AAE/C,YAAM,mBAAmB,SAAS,OAAO,CAAC,QAAQ;AAC5C,YAAA,IAAI,MAAM,YAAY,CAAC,SAAS,SAAS,IAAI,EAAE,GAAG;AAC7C,iBAAA;AAAA,QAAA;AAGL,YAAA,IAAI,OAAO,WAAW;AACpB,cAAA,CAAC,IAAI,MAAM;AACN,mBAAA;AAAA,UAAA;AAGL,cAAA,CAAC,IAAI,aAAa;AACb,mBAAA;AAAA,UAAA;AAGT,cAAI,CAAC,KAAK,kBAAkB,IAAI,WAAW,GAAG;AACrC,mBAAA;AAAA,UAAA;AAAA,QACT;AAGE,YAAA,IAAI,OAAO,oBAAoB;AAC7B,cAAA,CAAC,IAAI,aAAa;AACb,mBAAA;AAAA,UAAA;AAGT,cAAI,CAAC,KAAK,kBAAkB,IAAI,WAAW,GAAG;AACrC,mBAAA;AAAA,UAAA;AAAA,QACT;AAGK,eAAA;AAAA,MAAA,CACR;AAEM,aAAA;AAAA,QACL,UAAU;AAAA,MACZ;AAAA,aACO,OAAY;AACnB,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO,MAAM,4BAA4B,MAAM,OAAO,EAAE;AAAA,MAAA;AAExD,aAAA,EAAE,UAAU,GAAG;AAAA,IAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,mBAAmB,SAAgD;AACnE,QAAA;AACF,aAAO,MAAM,KAAK,WAAW,aAAa,OAAO;AAAA,aAC1C,OAAO;AACd,WAAK,OAAO;AAAA,QACV,uCAAuC,OAAO;AAAA,QAC9C;AAAA,MACF;AACO,aAAA;AAAA,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAa,iBACX,SACA,eACwE;AACpE,QAAA;AACF,YAAM,YAAY,MAAM,KAAK,WAAW,aAAa,OAAO;AAE5D,UAAI,CAAC,WAAW;AACP,eAAA;AAAA,UACL,WAAW;AAAA,UACX,aAAa;AAAA,UACb,QAAQ;AAAA,QACV;AAAA,MAAA;AAGE,UAAA,CAAC,UAAU,YAAY,KAAK;AAC9B,eAAO,EAAE,WAAW,MAAM,aAAa,MAAM;AAAA,MAAA;AAG3C,UAAA;AACF,cAAM,gBAAgB,MAAM,KAAK,WAAW,aAAa,aAAa;AAElE,YAAA,UAAU,WAAW,UAAU,mBAAmB;AACpD,gBAAM,WAAW,OAAO,KAAK,UAAU,WAAW,KAAK,KAAK;AACtD,gBAAA,YAAY,MAAM,KAAK,WAAW;AAAA,YACtC;AAAA,YACA;AAAA,UACF;AAEA,cAAI,WAAW;AACb,mBAAO,EAAE,WAAW,MAAM,aAAa,MAAM;AAAA,UAAA;AAAA,QAC/C,OACK;AACL,gBAAM,iBAAiB,UAAU,WAAW,UAAU,WAAW,GAAG;AACpE,cAAI,cAAc,SAAA,MAAe,eAAe,YAAY;AAC1D,mBAAO,EAAE,WAAW,MAAM,aAAa,MAAM;AAAA,UAAA;AAAA,QAC/C;AAAA,eAEK,OAAO;AACd,aAAK,OAAO;AAAA,UACV,yBACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,QACF;AAAA,MAAA;AAGF,UACE,UAAU,kBAAkB,OAC5B,UAAU,aAAa,YAAY,SAAS,GAC5C;AACO,eAAA;AAAA,UACL,WAAW;AAAA,UACX,aAAa;AAAA,UACb,QAAQ;AAAA,QACV;AAAA,MAAA;AAGK,aAAA;AAAA,QACL,WAAW;AAAA,QACX,aAAa;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,aACO,OAAO;AACd,YAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,WAAK,OAAO,MAAM,sCAAsC,YAAY,EAAE;AAC/D,aAAA;AAAA,QACL,WAAW;AAAA,QACX,aAAa;AAAA,QACb,QAAQ,UAAU,YAAY;AAAA,MAChC;AAAA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,YACX,SACqC;AACjC,QAAA;AACF,YAAM,WAAW,MAAM,KAAK,WAAW,iBAAiB,OAAO;AAE/D,YAAM,oBAAoB,SAAS,OAAO,CAAC,QAAQ;AAC7C,YAAA,IAAI,MAAM,UAAU;AACf,iBAAA;AAAA,QAAA;AAGL,YAAA,IAAI,OAAO,WAAW;AACpB,cAAA,CAAC,IAAI,MAAM;AACN,mBAAA;AAAA,UAAA;AAGT,cAAI,IAAI,aAAa;AACnB,gBAAI,CAAC,KAAK,kBAAkB,IAAI,WAAW,GAAG;AACrC,qBAAA;AAAA,YAAA;AAAA,UACT;AAAA,QACF;AAGK,eAAA;AAAA,MAAA,CACR;AAEM,aAAA;AAAA,QACL,UAAU;AAAA,MACZ;AAAA,aACO,OAAY;AACnB,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO,MAAM,4BAA4B,MAAM,OAAO,EAAE;AAAA,MAAA;AAExD,aAAA,EAAE,UAAU,GAAG;AAAA,IAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,eAAe,SAA2C;AACjE,QAAA;AACF,aAAO,MAAM,KAAK,WAAW,eAAe,OAAO;AAAA,aAC5C,GAAG;AACL,WAAA,OAAO,MAAM,2BAA2B,CAAC;AACxC,YAAA;AAAA,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,eAAe,WAA2C;AACrE,WAAO,MAAM,KAAK,WAAW,eAAe,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASvD,MAAa,gBACX,WACA,cAC0B;AAC1B,SAAK,OAAO,MAAM,mCAAmC,SAAS,EAAE;AAEhE,UAAM,WAAW,GAAG,SAAS,IAAI,KAAK,OAAO;AAE7C,QAAI,CAAC,cAAc;AACjB,YAAM,wBAAwB,WAAW,YAAY,EAAE,IAAI,QAAQ;AACnE,UAAI,uBAAuB;AACzB,aAAK,OAAO,MAAM,0BAA0B,SAAS,EAAE;AAChD,eAAA;AAAA,MAAA;AAAA,IACT;AAEE,QAAA;AACI,YAAA,cAAc,IAAI,YAAY;AAAA,QAClC,SAAS,KAAK;AAAA,QACd,MAAM;AAAA,UACJ,YAAY;AAAA;AAAA,QACd;AAAA,QACA,UAAU;AAAA,MAAA,CACX;AAEK,YAAA,gBAAgB,MAAM,YAAY;AAAA,QACtC;AAAA,QACA,KAAK;AAAA,MACP;AAEI,UAAA,CAAC,eAAe,SAAS;AAC3B,aAAK,OAAO;AAAA,UACV,8CAA8C,SAAS;AAAA,UACvD,eAAe;AAAA,QACjB;AACO,eAAA;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OACE,eAAe,SACf,8CAA8C,SAAS;AAAA,QAC3D;AAAA,MAAA;AAGF,YAAM,UAAU,cAAc;AAC9B,UAAI,YAA8B;AAGhC,UAAA,cAAc,WAAW,gBACzB,cAAc,WAAW,iBACzB,cAAc,WAAW,gBACzB;AACY,oBAAA;AAAA,UACV,cAAc,cAAc,UAAU;AAAA,UACtC,eAAe,cAAc,UAAU;AAAA,UACvC,gBAAgB,cAAc,UAAU;AAAA,QAC1C;AAAA,MAAA;AAGF,YAAM,kBAAmC;AAAA,QACvC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,MACX;AACA,iBAAW,YAAY,EAAE,IAAI,UAAU,eAAe;AAC/C,aAAA;AAAA,aACA,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,+BAA+B,MAAM,OAAO;AAC1D,WAAA,OAAO,MAAM,UAAU;AACrB,aAAA;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,6BACX,WACoB;AACpB,WAAO,MAAM,KAAK,4BAA4B,WAAW,IAAI;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS/D,MAAa,4BACX,WACA,cACoB;AAChB,QAAA;AACI,YAAA,kBAAkB,MAAM,KAAK;AAAA,QACjC;AAAA,QACA;AAAA,MACF;AAEI,UAAA,CAAC,iBAAiB,SAAS;AAC7B,cAAM,IAAI,MAAM,gBAAgB,SAAS,4BAA4B;AAAA,MAAA;AAGvE,YAAM,UAAU,gBAAgB;AAEhC,UAAI,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,iBAAiB;AACvD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MAAA;AAGE,UAAA,CAAC,gBAAgB,WAAW;AAC9B,cAAM,IAAI;AAAA,UACR,mDAAmD,SAAS;AAAA,QAC9D;AAAA,MAAA;AAGF,aAAO,gBAAgB;AAAA,aAChB,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,kCAAkC,MAAM,OAAO;AAC7D,WAAA,OAAO,MAAM,UAAU;AACtB,YAAA;AAAA,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,yBACX,gBACuB;AACnB,QAAA;AACF,YAAM,YAAY,MAAM,KAAK,4BAA4B,cAAc;AACvE,UAAI,CAAC,WAAW;AACd,aAAK,OAAO;AAAA,UACV,uDAAuD,cAAc;AAAA,QACvE;AACA,eAAO,CAAC;AAAA,MAAA;AAEV,YAAM,WAAW,MAAM,KAAK,YAAY,UAAU,aAAa;AAC/D,aAAO,SAAS,SAAS;AAAA,QACvB,CAAC,QACC,IAAI,MAAM,aACT,IAAI,OAAO,wBACV,IAAI,OAAO,wBACX,IAAI,OAAO;AAAA,MACjB;AAAA,aACO,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,yCAAyC,MAAM,OAAO;AACpE,WAAA,OAAO,MAAM,UAAU;AAC5B,aAAO,CAAC;AAAA,IAAA;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAa,qBACX,gBACA,cACkB;AACd,QAAA;AACI,YAAA,gBAAgB,MAAM,KAAK;AAAA,QAC/B;AAAA,MACF;AACM,YAAA,WAAW,MAAM,KAAK;AAAA,QAC1B,cAAc;AAAA,MAChB;AACA,aAAO,SAAS;AAAA,QACd,CAAC,QACC,IAAI,OAAO,wBAAwB,IAAI,kBAAkB;AAAA,MAC7D;AAAA,aACO,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,uCAAuC,MAAM,OAAO;AAClE,WAAA,OAAO,MAAM,UAAU;AACrB,aAAA;AAAA,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,kBACJ,MACA,WAAW,OACoB;AAC/B,QAAI,CAAC,KAAK,MAAM,2CAA2C,GAAG;AACrD,aAAA;AAAA,IAAA;AAGL,QAAA;AACF,YAAM,WAAW,IAAI,YAAY,KAAK,OAAO,UAAU;AAEvD,UAAI,CAAC,SAAS,WAAW,IAAI,GAAG;AACvB,eAAA;AAAA,MAAA;AAGT,YAAM,SAAS,MAAM,SAAS,WAAW,MAAM;AAAA,QAC7C,SAAS,KAAK;AAAA,QACd,WAAW;AAAA,MAAA,CACZ;AAED,aAAO,OAAO;AAAA,aACP,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,kCAAkC,MAAM,OAAO;AAC7D,WAAA,OAAO,MAAM,UAAU;AACtB,YAAA,IAAI,MAAM,UAAU;AAAA,IAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,0BACJ,MACA,WAAW,OAKV;AACD,QAAI,CAAC,KAAK,MAAM,2CAA2C,GAAG;AACrD,aAAA;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IAAA;AAGE,QAAA;AACF,YAAM,WAAW,IAAI,YAAY,KAAK,OAAO,UAAU;AAEhD,aAAA,MAAM,SAAS,mBAAmB,MAAM;AAAA,QAC7C,SAAS,KAAK;AAAA,QACd,WAAW;AAAA,MAAA,CACZ;AAAA,aACM,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,4CAA4C,MAAM,OAAO;AACvE,WAAA,OAAO,MAAM,UAAU;AACtB,YAAA,IAAI,MAAM,UAAU;AAAA,IAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,wBACJ,gBACA,MAC6B;AACvB,UAAA,kBAAkB,KAAK,oBAAoB;AAC7C,QAAA,CAAC,iBAAiB,WAAW;AACzB,YAAA,IAAI,MAAM,gCAAgC;AAAA,IAAA;AAE5C,UAAA,aAAa,MAAM,KAAK,cAAc;AAC5C,UAAM,YAAY,gBAAgB;AAE5B,UAAA,kBAAkB,MAAM,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAEI,QAAA,CAAC,iBAAiB,WAAW;AAC/B,YAAM,IAAI,MAAM,2BAA2B,gBAAgB,MAAM,EAAE;AAAA,IAAA;AAG/D,UAAA,sBAAsB,MAAM,KAAK;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,CAAC,qBAAqB;AAClB,YAAA,IAAI,MAAM,0CAA0C;AAAA,IAAA;AAG5D,UAAM,2BAA2B;AAAA,MAC/B,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAEA,UAAM,cAAc,gBAAgB;AAC9B,UAAA,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,SAAK,OAAO;AAAA,MACV,6CAA6C,cAAc;AAAA,IAC7D;AAEA,UAAM,gBAAgB,MAAM,KAAK,4BAA4B,SAAS;AAEtE,QAAI,CAAC,eAAe;AACZ,YAAA,IAAI,MAAM,mCAAmC;AAAA,IAAA;AAG/C,UAAA,yBAAyB,SAAS,qBAAqB,SAAS;AAEtE,QAAI,CAAC,wBAAwB;AACrB,YAAA,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAG1D,UAAM,sBAAsB,GAAG,cAAc,IAAI,mBAAmB;AAE9D,UAAA,KAAK,cAAc,cAAc,eAAe;AAAA,MACpD,GAAG;AAAA,MACH,mBAAmB,cAAc;AAAA,MACjC,uBAAuB;AAAA,MACvB,aAAa;AAAA,IAAA,CACd;AAEM,WAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYT,MAAa,qCAAqC;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAS8B;AAC9B,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,6BAA6B;AAAA,MAC7B,sBAAsB;AAAA,MACtB,uBAAuB;AAAA,MACvB,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AACA,WAAO,MAAM,KAAK,cAAc,iBAAiB,OAAO;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1D,MAAM,8BACJ,gBACA,qBACA,cAAc,IACd,UAAU,KACV,qBAAqB,MAC2B;AAChD,SAAK,OAAO;AAAA,MACV,wDAAwD,cAAc,mBAAmB,mBAAmB;AAAA,IAC9G;AAEA,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,WAAK,OAAO;AAAA,QACV,WAAW,UAAU,CAAC,IAAI,WAAW;AAAA,MACvC;AACA,YAAM,WAAW,MAAM,KAAK,WAAW,iBAAiB,cAAc;AAEtE,YAAM,4BAA4B,SAAS;AAAA,QACzC,CAAC,MAAM,EAAE,OAAO;AAAA,MAClB;AAEA,WAAK,OAAO;AAAA,QACV,SAAS,0BAA0B,MAAM;AAAA,MAC3C;AAEI,UAAA,0BAA0B,SAAS,GAAG;AACxC,mBAAW,WAAW,2BAA2B;AAC/C,cAAI,OAAO,QAAQ,aAAa,MAAM,OAAO,mBAAmB,GAAG;AACjE,kBAAM,qBAAqB;AAAA,cACzB,mBAAmB,QAAQ;AAAA,cAC3B,iBAAiB,OAAO,QAAQ,eAAe;AAAA,cAC/C,aAAa,QAAQ;AAAA,cACrB,MAAM,QAAQ;AAAA,YAChB;AAEA,kBAAM,uBAAuB,KAAK;AAAA,cAChC,mBAAmB;AAAA,YACrB;AAEM,kBAAA,UAAU,KAAK,oBAAoB;AACzC,kBAAM,8BACJ,MAAM,KAAK,4BAA4B,oBAAoB;AAE7D,kBAAM,wBACJ,MAAM,KAAK,4BAA4B,QAAQ,SAAS;AAE1D,iBAAK,OAAO;AAAA,cACV;AAAA,cACA;AAAA,YACF;AAEA,gBAAI,oBAAoB;AAKtB,oBAAM,KAAK,qCAAqC;AAAA,gBAC9C,0BACE,4BAA4B;AAAA,gBAC9B,iBAAiB,sBAAsB;AAAA,gBACvC;AAAA,gBACA,oBAAoB,mBAAmB;AAAA,gBACvC,mBAAmB,mBAAmB;AAAA,gBACtC,YAAY,mBAAmB;AAAA,gBAC/B,MAAM,mBAAmB,QAAQ;AAAA,cAAA,CAClC;AAAA,YAAA;AAGI,mBAAA;AAAA,UAAA;AAAA,QACT;AAAA,MACF;AAGE,UAAA,UAAU,cAAc,GAAG;AAC7B,aAAK,OAAO;AAAA,UACV,2CAA2C,OAAO;AAAA,QACpD;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAAA,MAAA;AAAA,IAC7D;AAGF,UAAM,IAAI;AAAA,MACR,2CAA2C,WAAW,4BAA4B,mBAAmB;AAAA,IACvG;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQF,MAAa,cAAc,cAAyC;AAC9D,QAAA,KAAK,cAAc,CAAC,cAAc;AACpC,aAAO,KAAK;AAAA,IAAA;AAGR,UAAA,kBAAkB,KAAK,oBAAoB;AAE7C,QAAA,CAAC,gBAAgB,WAAW;AACxB,YAAA,IAAI,MAAM,uBAAuB;AAAA,IAAA;AAGzC,UAAM,UAAU,MAAM,KAAK,gBAAgB,gBAAgB,SAAS;AAEhE,QAAA,CAAC,QAAQ,SAAS;AACd,YAAA,IAAI,MAAM,4BAA4B;AAAA,IAAA;AAG9C,UAAM,aAAa,GAAG,QAAQ,WAAW,YAAY,IAAI,gBAAgB,SAAS;AAClF,SAAK,aAAa;AACX,WAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,MAAa,yBACX,gBACiB;AACjB,UAAM,YAAY,MAAM,KAAK,WAAW,aAAa,cAAc;AAE/D,QAAA,CAAC,WAAW,MAAM;AACd,YAAA,IAAI,MAAM,+BAA+B;AAAA,IAAA;AAG3C,UAAA,gBAAgB,UAAU,KAAK,SAAS;AACxC,UAAA,iBAAiB,cAAc,MAAM,GAAG;AACxC,UAAA,sBAAsB,iBAAiB,CAAC;AAE9C,QAAI,CAAC,qBAAqB;AAClB,YAAA,IAAI,MAAM,0CAA0C;AAAA,IAAA;AAGrD,WAAA;AAAA,EAAA;AAAA,EAGF,aAAmB;AACb,eAAA,cAAc,MAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUvB,mBACR,MACA,SAMQ;AACF,UAAA,MAAM,QAAQ,OAAO;AAE3B,YAAQ,MAAM;AAAA,MACZ,KAAK;AACC,YAAA,CAAC,QAAQ,WAAW;AAChB,gBAAA,IAAI,MAAM,wCAAwC;AAAA,QAAA;AAE1D,eAAO,YAAY,GAAG,MAAM,QAAQ,SAAS;AAAA,MAC/C,KAAK;AACH,eAAO,YAAY,GAAG;AAAA,MACxB,KAAK;AACH,YAAI,CAAC,QAAQ,kBAAkB,QAAQ,iBAAiB,QAAW;AACjE,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QAAA;AAEF,eAAO,YAAY,GAAG,MAAM,QAAQ,cAAc,IAAI,QAAQ,YAAY;AAAA,MAC5E;AACE,cAAM,IAAI,MAAM,6BAA6B,IAAI,EAAE;AAAA,IAAA;AAAA,EACvD;AAAA,EAGF,MAAgB,wBACd,eACA,SACA,SACuD;AACnD,QAAA;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,wBAAwB;AAAA,QAC7D,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,aAAa;AAAA,QACf;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,gBAAgB,cAAe,CAAA;AAAA,MAAA,CACvD;AAEG,UAAA,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI;AAAA,UACR,mCAAmC,SAAS,UAAU;AAAA,QACxD;AAAA,MAAA;AAGK,aAAA,MAAM,SAAS,KAAK;AAAA,aACpB,GAAQ;AACf,YAAM,QAAQ;AACR,YAAA,aAAa,uCAAuC,MAAM,OAAO;AAClE,WAAA,OAAO,MAAM,UAAU;AACtB,YAAA;AAAA,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAkB,YAA6B;AACvD,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IAAA;AAGH,UAAA,QAAQ,WAAW,MAAM,GAAG;AAE9B,QAAA,MAAM,WAAW,GAAG;AACf,aAAA;AAAA,IAAA;AAGH,UAAA,eAAe,MAAM,CAAC;AACtB,UAAA,YAAY,MAAM,CAAC;AAEzB,QAAI,CAAC,cAAc;AACV,aAAA;AAAA,IAAA;AAGT,QAAI,CAAC,WAAW;AACP,aAAA;AAAA,IAAA;AAGT,UAAM,kBAAkB;AAExB,QAAI,CAAC,gBAAgB,KAAK,SAAS,GAAG;AAC7B,aAAA;AAAA,IAAA;AAGT,QAAI,CAAC,gBAAgB,KAAK,YAAY,GAAG;AAChC,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,EAAA;AAEX;AAEO,MAAM,WAAW;AAAA,EAMd,cAAc;AAFtB,SAAiB,YAAY;AAGtB,SAAA,4BAAY,IAAI;AAChB,SAAA,kCAAkB,IAAI;AAAA,EAAA;AAAA,EAG7B,OAAO,cAA0B;AAC3B,QAAA,CAAC,WAAW,UAAU;AACb,iBAAA,WAAW,IAAI,WAAW;AAAA,IAAA;AAEvC,WAAO,WAAW;AAAA,EAAA;AAAA,EAGpB,IAAI,KAAa,OAA8B;AACxC,SAAA,MAAM,IAAI,KAAK,KAAK;AACzB,SAAK,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;AAAA,EAAA;AAAA,EAGvD,IAAI,KAA0C;AAC5C,UAAM,SAAS,KAAK,YAAY,IAAI,GAAG;AACvC,QAAI,UAAU,SAAS,KAAK,IAAA,GAAO;AAC1B,aAAA,KAAK,MAAM,IAAI,GAAG;AAAA,IAAA;AAE3B,QAAI,QAAQ;AACL,WAAA,MAAM,OAAO,GAAG;AAChB,WAAA,YAAY,OAAO,GAAG;AAAA,IAAA;AAEtB,WAAA;AAAA,EAAA;AAAA,EAGT,QAAc;AACZ,SAAK,MAAM,MAAM;AACjB,SAAK,YAAY,MAAM;AAAA,EAAA;AAE3B;"}
1
+ {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/base-client.ts"],"sourcesContent":["import { Logger, LogLevel } from '../utils/logger';\nimport { Registration } from './registrations';\nimport { HCS11Client } from '../hcs-11/client';\nimport {\n AccountResponse,\n TopicResponse,\n ScheduleInfo,\n} from '../services/types';\nimport { TopicInfo } from '../services/types';\nimport { TransactionReceipt, PrivateKey, PublicKey } from '@hashgraph/sdk';\nimport axios from 'axios';\nimport { NetworkType } from '../utils/types';\nimport { HederaMirrorNode } from '../services';\nimport {\n WaitForConnectionConfirmationResponse,\n TransactMessage,\n} from './types';\nimport { HRLResolver } from '../utils/hrl-resolver';\n\nexport enum Hcs10MemoType {\n INBOUND = 'inbound',\n OUTBOUND = 'outbound',\n CONNECTION = 'connection',\n}\n\nexport interface HCS10Config {\n network: 'mainnet' | 'testnet';\n logLevel?: LogLevel;\n prettyPrint?: boolean;\n feeAmount?: number;\n}\n\nexport interface HCSMessage {\n p: 'hcs-10';\n op:\n | 'connection_request'\n | 'connection_created'\n | 'message'\n | 'close_connection'\n | 'transact';\n data: string;\n created?: Date;\n consensus_timestamp?: string;\n m?: string;\n payer: string;\n outbound_topic_id?: string;\n connection_request_id?: number;\n confirmed_request_id?: number;\n connection_topic_id?: string;\n connected_account_id?: string;\n requesting_account_id?: string;\n connection_id?: number;\n sequence_number: number;\n operator_id?: string;\n reason?: string;\n close_method?: string;\n schedule_id?: string;\n tx_id?: string;\n description?: string;\n timestamp?: number;\n}\n\nexport interface ProfileResponse {\n profile: any;\n topicInfo?: TopicInfo;\n success: boolean;\n error?: string;\n}\n\nexport abstract class HCS10BaseClient extends Registration {\n protected network: string;\n protected logger: Logger;\n protected feeAmount: number;\n public mirrorNode: HederaMirrorNode;\n\n protected operatorId: string;\n\n constructor(config: HCS10Config) {\n super();\n this.network = config.network;\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS10-BaseClient',\n prettyPrint: config.prettyPrint,\n });\n this.mirrorNode = new HederaMirrorNode(\n config.network as NetworkType,\n this.logger\n );\n this.feeAmount = config.feeAmount || 0.001;\n }\n\n abstract submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee?: boolean\n ): Promise<TransactionReceipt>;\n\n abstract getAccountAndSigner(): { accountId: string; signer: any };\n\n public extractTopicFromOperatorId(operatorId: string): string {\n if (!operatorId) {\n return '';\n }\n const parts = operatorId.split('@');\n if (parts.length > 0) {\n return parts[0];\n }\n return '';\n }\n\n public extractAccountFromOperatorId(operatorId: string): string {\n if (!operatorId) {\n return '';\n }\n const parts = operatorId.split('@');\n if (parts.length > 1) {\n return parts[1];\n }\n return '';\n }\n\n /**\n * Get a stream of messages from a connection topic\n * @param topicId The connection topic ID to get messages from\n * @returns A stream of filtered messages valid for connection topics\n */\n public async getMessageStream(\n topicId: string\n ): Promise<{ messages: HCSMessage[] }> {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId);\n const validOps = ['message', 'close_connection', 'transact'];\n\n const filteredMessages = messages.filter((msg) => {\n if (msg.p !== 'hcs-10' || !validOps.includes(msg.op)) {\n return false;\n }\n\n if (msg.op === 'message' || msg.op === 'close_connection') {\n if (!msg.operator_id) {\n return false;\n }\n\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n\n if (msg.op === 'message' && !msg.data) {\n return false;\n }\n }\n\n if (msg.op === 'transact') {\n if (\n !msg.operator_id ||\n !msg.schedule_id ||\n !msg.tx_id ||\n !msg.description\n ) {\n return false;\n }\n\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n }\n\n return true;\n });\n\n return {\n messages: filteredMessages,\n };\n } catch (error: any) {\n if (this.logger) {\n this.logger.error(`Error fetching messages: ${error.message}`);\n }\n return { messages: [] };\n }\n }\n\n /**\n * Public method to retrieve topic information using the internal mirror node client.\n *\n * @param topicId The ID of the topic to query.\n * @returns Topic information or null if not found or an error occurs.\n */\n async getPublicTopicInfo(topicId: string): Promise<TopicResponse | null> {\n try {\n return await this.mirrorNode.getTopicInfo(topicId);\n } catch (error) {\n this.logger.error(\n `Error getting public topic info for ${topicId}:`,\n error\n );\n return null;\n }\n }\n\n /**\n * Checks if a user can submit to a topic and determines if a fee is required\n * @param topicId The topic ID to check\n * @param userAccountId The account ID of the user attempting to submit\n * @returns Object with canSubmit, requiresFee, and optional reason\n */\n public async canSubmitToTopic(\n topicId: string,\n userAccountId: string\n ): Promise<{ canSubmit: boolean; requiresFee: boolean; reason?: string }> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n return {\n canSubmit: false,\n requiresFee: false,\n reason: 'Topic does not exist',\n };\n }\n\n if (!topicInfo.submit_key?.key) {\n return { canSubmit: true, requiresFee: false };\n }\n\n try {\n const userPublicKey = await this.mirrorNode.getPublicKey(userAccountId);\n\n if (topicInfo.submit_key._type === 'ProtobufEncoded') {\n const keyBytes = Buffer.from(topicInfo.submit_key.key, 'hex');\n const hasAccess = await this.mirrorNode.checkKeyListAccess(\n keyBytes,\n userPublicKey\n );\n\n if (hasAccess) {\n return { canSubmit: true, requiresFee: false };\n }\n } else {\n const topicSubmitKey = PublicKey.fromString(topicInfo.submit_key.key);\n if (userPublicKey.toString() === topicSubmitKey.toString()) {\n return { canSubmit: true, requiresFee: false };\n }\n }\n } catch (error) {\n this.logger.error(\n `Key validation error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n\n if (\n topicInfo.fee_schedule_key?.key &&\n topicInfo.custom_fees?.fixed_fees?.length > 0\n ) {\n return {\n canSubmit: true,\n requiresFee: true,\n reason: 'Requires fee payment via HIP-991',\n };\n }\n\n return {\n canSubmit: false,\n requiresFee: false,\n reason: 'User does not have submit permission for this topic',\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger.error(`Topic submission validation error: ${errorMessage}`);\n return {\n canSubmit: false,\n requiresFee: false,\n reason: `Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Get all messages from a topic\n * @param topicId The topic ID to get messages from\n * @returns All messages from the topic\n */\n public async getMessages(\n topicId: string\n ): Promise<{ messages: HCSMessage[] }> {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId);\n\n const validatedMessages = messages.filter((msg) => {\n if (msg.p !== 'hcs-10') {\n return false;\n }\n\n if (msg.op === 'message') {\n if (!msg.data) {\n return false;\n }\n\n if (msg.operator_id) {\n if (!this.isValidOperatorId(msg.operator_id)) {\n return false;\n }\n }\n }\n\n return true;\n });\n\n return {\n messages: validatedMessages,\n };\n } catch (error: any) {\n if (this.logger) {\n this.logger.error(`Error fetching messages: ${error.message}`);\n }\n return { messages: [] };\n }\n }\n\n /**\n * Requests an account from the mirror node\n * @param account The account ID to request\n * @returns The account response\n */\n public async requestAccount(account: string): Promise<AccountResponse> {\n try {\n return await this.mirrorNode.requestAccount(account);\n } catch (e) {\n this.logger.error('Failed to fetch account', e);\n throw e;\n }\n }\n\n /**\n * Retrieves the memo for an account\n * @param accountId The account ID to retrieve the memo for\n * @returns The memo\n */\n public async getAccountMemo(accountId: string): Promise<string | null> {\n return await this.mirrorNode.getAccountMemo(accountId);\n }\n\n /**\n * Retrieves the profile for an account\n * @param accountId The account ID to retrieve the profile for\n * @param disableCache Whether to disable caching of the result\n * @returns The profile\n */\n public async retrieveProfile(\n accountId: string,\n disableCache?: boolean\n ): Promise<ProfileResponse> {\n this.logger.debug(`Retrieving profile for account: ${accountId}`);\n\n const cacheKey = `${accountId}-${this.network}`;\n\n if (!disableCache) {\n const cachedProfileResponse = HCS10Cache.getInstance().get(cacheKey);\n if (cachedProfileResponse) {\n this.logger.debug(`Cache hit for profile: ${accountId}`);\n return cachedProfileResponse;\n }\n }\n try {\n const hcs11Client = new HCS11Client({\n network: this.network as 'mainnet' | 'testnet',\n auth: {\n operatorId: '0.0.0', // Read-only operations only\n },\n logLevel: 'info',\n });\n\n const profileResult = await hcs11Client.fetchProfileByAccountId(\n accountId,\n this.network\n );\n\n if (!profileResult?.success) {\n this.logger.error(\n `Failed to retrieve profile for account ID: ${accountId}`,\n profileResult?.error\n );\n return {\n profile: null,\n success: false,\n error:\n profileResult?.error ||\n `Failed to retrieve profile for account ID: ${accountId}`,\n };\n }\n\n const profile = profileResult.profile;\n let topicInfo: TopicInfo | null = null;\n\n if (\n profileResult.topicInfo?.inboundTopic &&\n profileResult.topicInfo?.outboundTopic &&\n profileResult.topicInfo?.profileTopicId\n ) {\n topicInfo = {\n inboundTopic: profileResult.topicInfo.inboundTopic,\n outboundTopic: profileResult.topicInfo.outboundTopic,\n profileTopicId: profileResult.topicInfo.profileTopicId,\n };\n }\n\n const responseToCache: ProfileResponse = {\n profile,\n topicInfo,\n success: true,\n };\n HCS10Cache.getInstance().set(cacheKey, responseToCache);\n return responseToCache;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve profile: ${error.message}`;\n this.logger.error(logMessage);\n return {\n profile: null,\n success: false,\n error: logMessage,\n };\n }\n }\n\n /**\n * @deprecated Use retrieveCommunicationTopics instead\n * @param accountId The account ID to retrieve the outbound connect topic for\n * @returns {TopicInfo} Topic Info from target profile.\n */\n public async retrieveOutboundConnectTopic(\n accountId: string\n ): Promise<TopicInfo> {\n return await this.retrieveCommunicationTopics(accountId, true);\n }\n\n /**\n * Retrieves the communication topics for an account\n * @param accountId The account ID to retrieve the communication topics for\n * @param disableCache Whether to disable caching of the result\n * @returns {TopicInfo} Topic Info from target profile.\n */\n public async retrieveCommunicationTopics(\n accountId: string,\n disableCache?: boolean\n ): Promise<TopicInfo> {\n try {\n const profileResponse = await this.retrieveProfile(\n accountId,\n disableCache\n );\n\n if (!profileResponse?.success) {\n throw new Error(profileResponse.error || 'Failed to retrieve profile');\n }\n\n const profile = profileResponse.profile;\n\n if (!profile.inboundTopicId || !profile.outboundTopicId) {\n throw new Error(\n `Invalid HCS-11 profile for HCS-10 agent: missing inboundTopicId or outboundTopicId`\n );\n }\n\n if (!profileResponse.topicInfo) {\n throw new Error(\n `TopicInfo is missing in the profile for account ${accountId}`\n );\n }\n\n return profileResponse.topicInfo;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve topic info: ${error.message}`;\n this.logger.error(logMessage);\n throw error;\n }\n }\n\n /**\n * Retrieves outbound messages for an agent\n * @param agentAccountId The account ID of the agent\n * @returns The outbound messages\n */\n public async retrieveOutboundMessages(\n agentAccountId: string\n ): Promise<HCSMessage[]> {\n try {\n const topicInfo = await this.retrieveCommunicationTopics(agentAccountId);\n if (!topicInfo) {\n this.logger.warn(\n `No outbound connect topic found for agentAccountId: ${agentAccountId}`\n );\n return [];\n }\n const response = await this.getMessages(topicInfo.outboundTopic);\n return response.messages.filter(\n (msg) =>\n msg.p === 'hcs-10' &&\n (msg.op === 'connection_request' ||\n msg.op === 'connection_created' ||\n msg.op === 'message')\n );\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to retrieve outbound messages: ${error.message}`;\n this.logger.error(logMessage);\n return [];\n }\n }\n\n /**\n * Checks if a connection has been created for an agent\n * @param agentAccountId The account ID of the agent\n * @param connectionId The ID of the connection\n * @returns True if the connection has been created, false otherwise\n */\n public async hasConnectionCreated(\n agentAccountId: string,\n connectionId: number\n ): Promise<boolean> {\n try {\n const outBoundTopic = await this.retrieveCommunicationTopics(\n agentAccountId\n );\n const messages = await this.retrieveOutboundMessages(\n outBoundTopic.outboundTopic\n );\n return messages.some(\n (msg) =>\n msg.op === 'connection_created' && msg.connection_id === connectionId\n );\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Failed to check connection created: ${error.message}`;\n this.logger.error(logMessage);\n return false;\n }\n }\n\n /**\n * Gets message content, resolving any HRL references if needed\n * @param data The data string that may contain an HRL reference\n * @param forceRaw Whether to force returning raw binary data\n * @returns The resolved content\n */\n async getMessageContent(\n data: string,\n forceRaw = false\n ): Promise<string | ArrayBuffer> {\n if (!data.match(/^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/)) {\n return data;\n }\n\n try {\n const resolver = new HRLResolver(this.logger.getLevel());\n\n if (!resolver.isValidHRL(data)) {\n return data;\n }\n\n const result = await resolver.resolveHRL(data, {\n network: this.network as 'mainnet' | 'testnet',\n returnRaw: forceRaw,\n });\n\n return result.content;\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Gets message content with its content type, resolving any HRL references if needed\n * @param data The data string that may contain an HRL reference\n * @param forceRaw Whether to force returning raw binary data\n * @returns The resolved content along with content type information\n */\n async getMessageContentWithType(\n data: string,\n forceRaw = false\n ): Promise<{\n content: string | ArrayBuffer;\n contentType: string;\n isBinary: boolean;\n }> {\n if (!data.match(/^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/)) {\n return {\n content: data,\n contentType: 'text/plain',\n isBinary: false,\n };\n }\n\n try {\n const resolver = new HRLResolver(this.logger.getLevel());\n\n return await resolver.getContentWithType(data, {\n network: this.network as 'mainnet' | 'testnet',\n returnRaw: forceRaw,\n });\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference with type: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Submits a connection request to an inbound topic\n * @param inboundTopicId The ID of the inbound topic\n * @param memo An optional memo for the message\n * @returns The transaction receipt\n */\n async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const accountResponse = this.getAccountAndSigner();\n if (!accountResponse?.accountId) {\n throw new Error('Operator account ID is not set');\n }\n const operatorId = await this.getOperatorId();\n const accountId = accountResponse.accountId;\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n accountId\n );\n\n if (!submissionCheck?.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const inboundAccountOwner = await this.retrieveInboundAccountId(\n inboundTopicId\n );\n\n if (!inboundAccountOwner) {\n throw new Error('Failed to retrieve topic info account ID');\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n m: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveCommunicationTopics(accountId);\n\n if (!outboundTopic) {\n throw new Error('Failed to retrieve outbound topic');\n }\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n const requestorOperatorId = `${inboundTopicId}@${inboundAccountOwner}`;\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n operator_id: requestorOperatorId,\n });\n\n return response;\n }\n\n /**\n * Records an outbound connection confirmation\n * @param outboundTopicId The ID of the outbound topic\n * @param connectionRequestId The ID of the connection request\n * @param confirmedRequestId The ID of the confirmed request\n * @param connectionTopicId The ID of the connection topic\n * @param operatorId The operator ID of the original message sender.\n * @param memo An optional memo for the message\n */\n public async recordOutboundConnectionConfirmation({\n outboundTopicId,\n requestorOutboundTopicId,\n connectionRequestId,\n confirmedRequestId,\n connectionTopicId,\n operatorId,\n memo,\n }: {\n outboundTopicId: string;\n requestorOutboundTopicId: string;\n connectionRequestId: number;\n confirmedRequestId: number;\n connectionTopicId: string;\n operatorId: string;\n memo: string;\n }): Promise<TransactionReceipt> {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n outbound_topic_id: outboundTopicId,\n requestor_outbound_topic_id: requestorOutboundTopicId,\n confirmed_request_id: confirmedRequestId,\n connection_request_id: connectionRequestId,\n operator_id: operatorId,\n m: memo,\n };\n return await this.submitPayload(outboundTopicId, payload);\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000,\n recordConfirmation = true\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n const confirmationResult = {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n\n const confirmedByAccountId = this.extractAccountFromOperatorId(\n confirmationResult.confirmedBy\n );\n\n const account = this.getAccountAndSigner();\n const confirmedByConnectionTopics =\n await this.retrieveCommunicationTopics(confirmedByAccountId);\n\n const agentConnectionTopics =\n await this.retrieveCommunicationTopics(account.accountId);\n\n this.logger.info(\n 'Connection confirmation found',\n confirmationResult\n );\n\n if (recordConfirmation) {\n /**\n * Record's the confirmation of the connection request from the\n * confirmedBy account to the agent account.\n */\n await this.recordOutboundConnectionConfirmation({\n requestorOutboundTopicId:\n confirmedByConnectionTopics.outboundTopic,\n outboundTopicId: agentConnectionTopics.outboundTopic,\n connectionRequestId,\n confirmedRequestId: confirmationResult.sequence_number,\n connectionTopicId: confirmationResult.connectionTopicId,\n operatorId: confirmationResult.confirmedBy,\n memo: confirmationResult.memo || 'Connection confirmed',\n });\n }\n\n return confirmationResult;\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n /**\n * Retrieves the operator ID for the current agent\n * @param disableCache Whether to disable caching of the result\n * @returns The operator ID\n */\n public async getOperatorId(disableCache?: boolean): Promise<string> {\n if (this.operatorId && !disableCache) {\n return this.operatorId;\n }\n\n const accountResponse = this.getAccountAndSigner();\n\n if (!accountResponse.accountId) {\n throw new Error('Operator ID not found');\n }\n\n const profile = await this.retrieveProfile(accountResponse.accountId);\n\n if (!profile.success) {\n throw new Error('Failed to retrieve profile');\n }\n\n const operatorId = `${profile.topicInfo?.inboundTopic}@${accountResponse.accountId}`;\n this.operatorId = operatorId;\n return operatorId;\n }\n\n /**\n * Retrieves the account ID of the owner of an inbound topic\n * @param inboundTopicId The ID of the inbound topic\n * @returns The account ID of the owner of the inbound topic\n */\n public async retrieveInboundAccountId(\n inboundTopicId: string\n ): Promise<string> {\n const topicInfo = await this.mirrorNode.getTopicInfo(inboundTopicId);\n\n if (!topicInfo?.memo) {\n throw new Error('Failed to retrieve topic info');\n }\n\n const topicInfoMemo = topicInfo.memo.toString();\n const topicInfoParts = topicInfoMemo.split(':');\n const inboundAccountOwner = topicInfoParts?.[4];\n\n if (!inboundAccountOwner) {\n throw new Error('Failed to retrieve topic info account ID');\n }\n\n return inboundAccountOwner;\n }\n\n public clearCache(): void {\n HCS10Cache.getInstance().clear();\n }\n\n /**\n * Generates a standard HCS-10 memo string.\n * @param type The type of topic memo ('inbound', 'outbound', 'connection').\n * @param options Configuration options for the memo.\n * @returns The formatted memo string.\n * @protected\n */\n protected _generateHcs10Memo(\n type: Hcs10MemoType,\n options: {\n ttl?: number;\n accountId?: string;\n inboundTopicId?: string;\n connectionId?: number;\n }\n ): string {\n const ttl = options.ttl ?? 60;\n\n switch (type) {\n case Hcs10MemoType.INBOUND:\n if (!options.accountId) {\n throw new Error('accountId is required for inbound memo');\n }\n return `hcs-10:0:${ttl}:0:${options.accountId}`;\n case Hcs10MemoType.OUTBOUND:\n return `hcs-10:0:${ttl}:1`;\n case Hcs10MemoType.CONNECTION:\n if (!options.inboundTopicId || options.connectionId === undefined) {\n throw new Error(\n 'inboundTopicId and connectionId are required for connection memo'\n );\n }\n return `hcs-10:1:${ttl}:2:${options.inboundTopicId}:${options.connectionId}`;\n default:\n throw new Error(`Invalid HCS-10 memo type: ${type}`);\n }\n }\n\n protected async checkRegistrationStatus(\n transactionId: string,\n network: string,\n baseUrl: string\n ): Promise<{ status: 'pending' | 'success' | 'failed' }> {\n try {\n const response = await fetch(`${baseUrl}/api/request-confirm`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Network': network,\n },\n body: JSON.stringify({ transaction_id: transactionId }),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to confirm registration: ${response.statusText}`\n );\n }\n\n return await response.json();\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error checking registration status: ${error.message}`;\n this.logger.error(logMessage);\n throw error;\n }\n }\n\n /**\n * Validates if an operator_id follows the correct format (agentTopicId@accountId)\n * @param operatorId The operator ID to validate\n * @returns True if the format is valid, false otherwise\n */\n protected isValidOperatorId(operatorId: string): boolean {\n if (!operatorId) {\n return false;\n }\n\n const parts = operatorId.split('@');\n\n if (parts.length !== 2) {\n return false;\n }\n\n const agentTopicId = parts[0];\n const accountId = parts[1];\n\n if (!agentTopicId) {\n return false;\n }\n\n if (!accountId) {\n return false;\n }\n\n const hederaIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n\n if (!hederaIdPattern.test(accountId)) {\n return false;\n }\n\n if (!hederaIdPattern.test(agentTopicId)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Retrieves all transaction requests from a topic\n * @param topicId The topic ID to retrieve transactions from\n * @param limit Optional maximum number of messages to retrieve\n * @returns Array of transaction requests sorted by timestamp (newest first)\n */\n public async getTransactionRequests(\n topicId: string,\n limit?: number\n ): Promise<TransactMessage[]> {\n this.logger.debug(`Retrieving transaction requests from topic ${topicId}`);\n\n const { messages } = await this.getMessageStream(topicId);\n\n const transactOperations = (\n messages\n .filter(\n (m) =>\n m.op === 'transact' && m.schedule_id && m.tx_id && m.description\n )\n .map((m) => ({\n operator_id: m.operator_id || '',\n schedule_id: m.schedule_id || '',\n tx_id: m.tx_id || '',\n description: m.description || '',\n timestamp: Number(m.created?.getTime()),\n memo: m.m,\n sequence_number: Number(m.sequence_number),\n })) as TransactMessage[]\n ).sort((a, b) => b.timestamp - a.timestamp);\n\n const result = limit\n ? transactOperations.slice(0, limit)\n : transactOperations;\n\n return result;\n }\n}\n\nexport class HCS10Cache {\n private static instance: HCS10Cache;\n private cache: Map<string, ProfileResponse>;\n private cacheExpiry: Map<string, number>;\n private readonly CACHE_TTL = 3600000;\n\n private constructor() {\n this.cache = new Map();\n this.cacheExpiry = new Map();\n }\n\n static getInstance(): HCS10Cache {\n if (!HCS10Cache.instance) {\n HCS10Cache.instance = new HCS10Cache();\n }\n return HCS10Cache.instance;\n }\n\n set(key: string, value: ProfileResponse): void {\n this.cache.set(key, value);\n this.cacheExpiry.set(key, Date.now() + this.CACHE_TTL);\n }\n\n get(key: string): ProfileResponse | undefined {\n const expiry = this.cacheExpiry.get(key);\n if (expiry && expiry > Date.now()) {\n return this.cache.get(key);\n }\n if (expiry) {\n this.cache.delete(key);\n this.cacheExpiry.delete(key);\n }\n return undefined;\n }\n\n clear(): void {\n this.cache.clear();\n this.cacheExpiry.clear();\n }\n}\n"],"names":["Hcs10MemoType"],"mappings":"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"}
@@ -1,94 +1,224 @@
1
- import { assert, assertArgument } from "./standards-sdk.es49.js";
2
- function _getBytes(value, name, copy) {
3
- if (value instanceof Uint8Array) {
4
- if (copy) {
5
- return new Uint8Array(value);
6
- }
1
+ import utils from "./standards-sdk.es36.js";
2
+ import parseHeaders from "./standards-sdk.es88.js";
3
+ const $internals = Symbol("internals");
4
+ function normalizeHeader(header) {
5
+ return header && String(header).trim().toLowerCase();
6
+ }
7
+ function normalizeValue(value) {
8
+ if (value === false || value == null) {
7
9
  return value;
8
10
  }
9
- if (typeof value === "string" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {
10
- const result = new Uint8Array((value.length - 2) / 2);
11
- let offset = 2;
12
- for (let i = 0; i < result.length; i++) {
13
- result[i] = parseInt(value.substring(offset, offset + 2), 16);
14
- offset += 2;
15
- }
16
- return result;
17
- }
18
- assertArgument(false, "invalid BytesLike value", name || "value", value);
19
- }
20
- function getBytes(value, name) {
21
- return _getBytes(value, name, false);
11
+ return utils.isArray(value) ? value.map(normalizeValue) : String(value);
22
12
  }
23
- function getBytesCopy(value, name) {
24
- return _getBytes(value, name, true);
13
+ function parseTokens(str) {
14
+ const tokens = /* @__PURE__ */ Object.create(null);
15
+ const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
16
+ let match;
17
+ while (match = tokensRE.exec(str)) {
18
+ tokens[match[1]] = match[2];
19
+ }
20
+ return tokens;
25
21
  }
26
- function isHexString(value, length) {
27
- if (typeof value !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) {
28
- return false;
22
+ const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
23
+ function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {
24
+ if (utils.isFunction(filter)) {
25
+ return filter.call(this, value, header);
29
26
  }
30
- if (typeof length === "number" && value.length !== 2 + 2 * length) {
31
- return false;
27
+ if (isHeaderNameFilter) {
28
+ value = header;
32
29
  }
33
- if (length === true && value.length % 2 !== 0) {
34
- return false;
30
+ if (!utils.isString(value)) return;
31
+ if (utils.isString(filter)) {
32
+ return value.indexOf(filter) !== -1;
35
33
  }
36
- return true;
37
- }
38
- const HexCharacters = "0123456789abcdef";
39
- function hexlify(data) {
40
- const bytes = getBytes(data);
41
- let result = "0x";
42
- for (let i = 0; i < bytes.length; i++) {
43
- const v = bytes[i];
44
- result += HexCharacters[(v & 240) >> 4] + HexCharacters[v & 15];
45
- }
46
- return result;
47
- }
48
- function concat(datas) {
49
- return "0x" + datas.map((d) => hexlify(d).substring(2)).join("");
50
- }
51
- function dataSlice(data, start, end) {
52
- const bytes = getBytes(data);
53
- if (end != null && end > bytes.length) {
54
- assert(false, "cannot slice beyond data bounds", "BUFFER_OVERRUN", {
55
- buffer: bytes,
56
- length: bytes.length,
57
- offset: end
58
- });
34
+ if (utils.isRegExp(filter)) {
35
+ return filter.test(value);
59
36
  }
60
- return hexlify(bytes.slice(start == null ? 0 : start, end == null ? bytes.length : end));
61
37
  }
62
- function zeroPad(data, length, left) {
63
- const bytes = getBytes(data);
64
- assert(length >= bytes.length, "padding exceeds data length", "BUFFER_OVERRUN", {
65
- buffer: new Uint8Array(bytes),
66
- length,
67
- offset: length + 1
38
+ function formatHeader(header) {
39
+ return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
40
+ return char.toUpperCase() + str;
68
41
  });
69
- const result = new Uint8Array(length);
70
- result.fill(0);
71
- if (left) {
72
- result.set(bytes, length - bytes.length);
73
- } else {
74
- result.set(bytes, 0);
75
- }
76
- return hexlify(result);
77
42
  }
78
- function zeroPadValue(data, length) {
79
- return zeroPad(data, length, true);
43
+ function buildAccessors(obj, header) {
44
+ const accessorName = utils.toCamelCase(" " + header);
45
+ ["get", "set", "has"].forEach((methodName) => {
46
+ Object.defineProperty(obj, methodName + accessorName, {
47
+ value: function(arg1, arg2, arg3) {
48
+ return this[methodName].call(this, header, arg1, arg2, arg3);
49
+ },
50
+ configurable: true
51
+ });
52
+ });
80
53
  }
81
- function zeroPadBytes(data, length) {
82
- return zeroPad(data, length, false);
54
+ class AxiosHeaders {
55
+ constructor(headers) {
56
+ headers && this.set(headers);
57
+ }
58
+ set(header, valueOrRewrite, rewrite) {
59
+ const self = this;
60
+ function setHeader(_value, _header, _rewrite) {
61
+ const lHeader = normalizeHeader(_header);
62
+ if (!lHeader) {
63
+ throw new Error("header name must be a non-empty string");
64
+ }
65
+ const key = utils.findKey(self, lHeader);
66
+ if (!key || self[key] === void 0 || _rewrite === true || _rewrite === void 0 && self[key] !== false) {
67
+ self[key || _header] = normalizeValue(_value);
68
+ }
69
+ }
70
+ const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
71
+ if (utils.isPlainObject(header) || header instanceof this.constructor) {
72
+ setHeaders(header, valueOrRewrite);
73
+ } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
74
+ setHeaders(parseHeaders(header), valueOrRewrite);
75
+ } else if (utils.isHeaders(header)) {
76
+ for (const [key, value] of header.entries()) {
77
+ setHeader(value, key, rewrite);
78
+ }
79
+ } else {
80
+ header != null && setHeader(valueOrRewrite, header, rewrite);
81
+ }
82
+ return this;
83
+ }
84
+ get(header, parser) {
85
+ header = normalizeHeader(header);
86
+ if (header) {
87
+ const key = utils.findKey(this, header);
88
+ if (key) {
89
+ const value = this[key];
90
+ if (!parser) {
91
+ return value;
92
+ }
93
+ if (parser === true) {
94
+ return parseTokens(value);
95
+ }
96
+ if (utils.isFunction(parser)) {
97
+ return parser.call(this, value, key);
98
+ }
99
+ if (utils.isRegExp(parser)) {
100
+ return parser.exec(value);
101
+ }
102
+ throw new TypeError("parser must be boolean|regexp|function");
103
+ }
104
+ }
105
+ }
106
+ has(header, matcher) {
107
+ header = normalizeHeader(header);
108
+ if (header) {
109
+ const key = utils.findKey(this, header);
110
+ return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
111
+ }
112
+ return false;
113
+ }
114
+ delete(header, matcher) {
115
+ const self = this;
116
+ let deleted = false;
117
+ function deleteHeader(_header) {
118
+ _header = normalizeHeader(_header);
119
+ if (_header) {
120
+ const key = utils.findKey(self, _header);
121
+ if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {
122
+ delete self[key];
123
+ deleted = true;
124
+ }
125
+ }
126
+ }
127
+ if (utils.isArray(header)) {
128
+ header.forEach(deleteHeader);
129
+ } else {
130
+ deleteHeader(header);
131
+ }
132
+ return deleted;
133
+ }
134
+ clear(matcher) {
135
+ const keys = Object.keys(this);
136
+ let i = keys.length;
137
+ let deleted = false;
138
+ while (i--) {
139
+ const key = keys[i];
140
+ if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
141
+ delete this[key];
142
+ deleted = true;
143
+ }
144
+ }
145
+ return deleted;
146
+ }
147
+ normalize(format) {
148
+ const self = this;
149
+ const headers = {};
150
+ utils.forEach(this, (value, header) => {
151
+ const key = utils.findKey(headers, header);
152
+ if (key) {
153
+ self[key] = normalizeValue(value);
154
+ delete self[header];
155
+ return;
156
+ }
157
+ const normalized = format ? formatHeader(header) : String(header).trim();
158
+ if (normalized !== header) {
159
+ delete self[header];
160
+ }
161
+ self[normalized] = normalizeValue(value);
162
+ headers[normalized] = true;
163
+ });
164
+ return this;
165
+ }
166
+ concat(...targets) {
167
+ return this.constructor.concat(this, ...targets);
168
+ }
169
+ toJSON(asStrings) {
170
+ const obj = /* @__PURE__ */ Object.create(null);
171
+ utils.forEach(this, (value, header) => {
172
+ value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(", ") : value);
173
+ });
174
+ return obj;
175
+ }
176
+ [Symbol.iterator]() {
177
+ return Object.entries(this.toJSON())[Symbol.iterator]();
178
+ }
179
+ toString() {
180
+ return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n");
181
+ }
182
+ get [Symbol.toStringTag]() {
183
+ return "AxiosHeaders";
184
+ }
185
+ static from(thing) {
186
+ return thing instanceof this ? thing : new this(thing);
187
+ }
188
+ static concat(first, ...targets) {
189
+ const computed = new this(first);
190
+ targets.forEach((target) => computed.set(target));
191
+ return computed;
192
+ }
193
+ static accessor(header) {
194
+ const internals = this[$internals] = this[$internals] = {
195
+ accessors: {}
196
+ };
197
+ const accessors = internals.accessors;
198
+ const prototype = this.prototype;
199
+ function defineAccessor(_header) {
200
+ const lHeader = normalizeHeader(_header);
201
+ if (!accessors[lHeader]) {
202
+ buildAccessors(prototype, _header);
203
+ accessors[lHeader] = true;
204
+ }
205
+ }
206
+ utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
207
+ return this;
208
+ }
83
209
  }
210
+ AxiosHeaders.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]);
211
+ utils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {
212
+ let mapped = key[0].toUpperCase() + key.slice(1);
213
+ return {
214
+ get: () => value,
215
+ set(headerValue) {
216
+ this[mapped] = headerValue;
217
+ }
218
+ };
219
+ });
220
+ utils.freezeMethods(AxiosHeaders);
84
221
  export {
85
- concat,
86
- dataSlice,
87
- getBytes,
88
- getBytesCopy,
89
- hexlify,
90
- isHexString,
91
- zeroPadBytes,
92
- zeroPadValue
222
+ AxiosHeaders as default
93
223
  };
94
224
  //# sourceMappingURL=standards-sdk.es50.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es50.js","sources":["../../node_modules/ethers/lib.esm/utils/data.js"],"sourcesContent":["/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map"],"names":[],"mappings":";AAOA,SAAS,UAAU,OAAO,MAAM,MAAM;AAClC,MAAI,iBAAiB,YAAY;AAC7B,QAAI,MAAM;AACN,aAAO,IAAI,WAAW,KAAK;AAAA,IACvC;AACQ,WAAO;AAAA,EACf;AACI,MAAI,OAAQ,UAAW,YAAY,MAAM,MAAM,4BAA4B,GAAG;AAC1E,UAAM,SAAS,IAAI,YAAY,MAAM,SAAS,KAAK,CAAC;AACpD,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,aAAO,CAAC,IAAI,SAAS,MAAM,UAAU,QAAQ,SAAS,CAAC,GAAG,EAAE;AAC5D,gBAAU;AAAA,IACtB;AACQ,WAAO;AAAA,EACf;AACI,iBAAe,OAAO,2BAA2B,QAAQ,SAAS,KAAK;AAC3E;AAQO,SAAS,SAAS,OAAO,MAAM;AAClC,SAAO,UAAU,OAAO,MAAM,KAAK;AACvC;AAQO,SAAS,aAAa,OAAO,MAAM;AACtC,SAAO,UAAU,OAAO,MAAM,IAAI;AACtC;AAQO,SAAS,YAAY,OAAO,QAAQ;AACvC,MAAI,OAAQ,UAAW,YAAY,CAAC,MAAM,MAAM,kBAAkB,GAAG;AACjE,WAAO;AAAA,EACf;AACI,MAAI,OAAQ,WAAY,YAAY,MAAM,WAAW,IAAI,IAAI,QAAQ;AACjE,WAAO;AAAA,EACf;AACI,MAAI,WAAW,QAAS,MAAM,SAAS,MAAO,GAAG;AAC7C,WAAO;AAAA,EACf;AACI,SAAO;AACX;AAQA,MAAM,gBAAgB;AAIf,SAAS,QAAQ,MAAM;AAC1B,QAAM,QAAQ,SAAS,IAAI;AAC3B,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAM,IAAI,MAAM,CAAC;AACjB,cAAU,eAAe,IAAI,QAAS,CAAC,IAAI,cAAc,IAAI,EAAI;AAAA,EACzE;AACI,SAAO;AACX;AAKO,SAAS,OAAO,OAAO;AAC1B,SAAO,OAAO,MAAM,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE;AACnE;AAgBO,SAAS,UAAU,MAAM,OAAO,KAAK;AACxC,QAAM,QAAQ,SAAS,IAAI;AAC3B,MAAI,OAAO,QAAQ,MAAM,MAAM,QAAQ;AACnC,WAAO,OAAO,mCAAmC,kBAAkB;AAAA,MAC/D,QAAQ;AAAA,MAAO,QAAQ,MAAM;AAAA,MAAQ,QAAQ;AAAA,IACzD,CAAS;AAAA,EACT;AACI,SAAO,QAAQ,MAAM,MAAO,SAAS,OAAQ,IAAI,OAAQ,OAAO,OAAQ,MAAM,SAAS,GAAG,CAAC;AAC/F;AAYA,SAAS,QAAQ,MAAM,QAAQ,MAAM;AACjC,QAAM,QAAQ,SAAS,IAAI;AAC3B,SAAO,UAAU,MAAM,QAAQ,+BAA+B,kBAAkB;AAAA,IAC5E,QAAQ,IAAI,WAAW,KAAK;AAAA,IAC5B;AAAA,IACA,QAAQ,SAAS;AAAA,EACzB,CAAK;AACD,QAAM,SAAS,IAAI,WAAW,MAAM;AACpC,SAAO,KAAK,CAAC;AACb,MAAI,MAAM;AACN,WAAO,IAAI,OAAO,SAAS,MAAM,MAAM;AAAA,EAC/C,OACS;AACD,WAAO,IAAI,OAAO,CAAC;AAAA,EAC3B;AACI,SAAO,QAAQ,MAAM;AACzB;AAWO,SAAS,aAAa,MAAM,QAAQ;AACvC,SAAO,QAAQ,MAAM,QAAQ,IAAI;AACrC;AAWO,SAAS,aAAa,MAAM,QAAQ;AACvC,SAAO,QAAQ,MAAM,QAAQ,KAAK;AACtC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"standards-sdk.es50.js","sources":["../../node_modules/axios/lib/core/AxiosHeaders.js"],"sourcesContent":["'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}